继承Route属性会使Web API中已经存在的操作变得混乱

本文关键字:存在 操作 混乱 属性 Route API Web 继承 | 更新日期: 2023-09-27 18:03:07

我正试图完全根据此从基础控制器继承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同时返回AllLookupData两个动作,从而导致错误。

我不知道为什么它选择与Route属性的动作,即使在常规路由的情况下。我应该怎么做?或者是否有任何可靠的方法来编写ActionSelector来解决这个问题?

继承Route属性会使Web API中已经存在的操作变得混乱

尝试为All方法添加空的[Route]:

[HttpGet]
[Route]
public IEnumerable<TDto> All(){
    ...
}
相关文章: