继承 Route 属性会打乱 Web 中已有的操作 API
Inheriting Route attribute messes up already existing actions in Web API
我正在尝试完全根据 this 从基本控制器继承 Route
属性。虽然它看起来工作正常,但它弄乱了以前工作的动作。
下面是我的基本控制器和子控制器的最小示例。
[RoutePrefix("api/{controller}")]
public class MyController<TEntity, TDto>: ApiController{
[HttpGet]
public IEnumerable<TDto> All(){
...
}
[HttpGet, Route("lookup")]
public virtual IEnumerable<TDto> LookupData(){
...
}
}
[RoutePrefix("api/entity")]
public class EntityController : MyController<Entity, DTO>
{
}
实现路由属性继承后,api/entity/lookup
操作有效,但在 api/entity
(对于 All
)的情况下,ActionSelector
returns 2 个操作, All
, 和 LookupData
, 从而导致错误。
我不确定为什么即使在常规路线的情况下它也会选择具有 Route
属性的操作。我应该做些什么不同的事情?或者有什么可靠的方法可以为这个问题编写 ActionSelector
吗?
尝试将空 [Route] 添加到 All
方法:
[HttpGet]
[Route]
public IEnumerable<TDto> All(){
...
}
我正在尝试完全根据 this 从基本控制器继承 Route
属性。虽然它看起来工作正常,但它弄乱了以前工作的动作。
下面是我的基本控制器和子控制器的最小示例。
[RoutePrefix("api/{controller}")]
public class MyController<TEntity, TDto>: ApiController{
[HttpGet]
public IEnumerable<TDto> All(){
...
}
[HttpGet, Route("lookup")]
public virtual IEnumerable<TDto> LookupData(){
...
}
}
[RoutePrefix("api/entity")]
public class EntityController : MyController<Entity, DTO>
{
}
实现路由属性继承后,api/entity/lookup
操作有效,但在 api/entity
(对于 All
)的情况下,ActionSelector
returns 2 个操作, All
, 和 LookupData
, 从而导致错误。
我不确定为什么即使在常规路线的情况下它也会选择具有 Route
属性的操作。我应该做些什么不同的事情?或者有什么可靠的方法可以为这个问题编写 ActionSelector
吗?
尝试将空 [Route] 添加到 All
方法:
[HttpGet]
[Route]
public IEnumerable<TDto> All(){
...
}