继承Route属性会混淆Web API中已存在的操作

时间:2016-08-18 11:05:33

标签: c# asp.net asp.net-web-api routeattribute

我正在尝试完全根据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/entityAll}的情况下,ActionSelector返回2个操作,All }和LookupData,从而导致错误。

即使在常规路线的情况下,我也不确定为什么选择具有Route属性的操作。我该怎么办?或者是否有任何可靠的方法为此问题编写ActionSelector

1 个答案:

答案 0 :(得分:0)

尝试将空[路线]添加到All方法:

[HttpGet]
[Route]
public IEnumerable<TDto> All(){
    ...
}