继承 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(){
    ...
}