Asp.net web api WebApi 2.2 basecontroller,其端点可以通过路由覆盖

Asp.net web api WebApi 2.2 basecontroller,其端点可以通过路由覆盖,asp.net-web-api,asp.net-mvc-routing,asp.net-web-api2,Asp.net Web Api,Asp.net Mvc Routing,Asp.net Web Api2,我在webapi 2.2路由方面遇到了一些问题。我已将v5.2安装到我的项目中,并已修改配置以使用自定义DirectRouteProvider public class CustomDirectRouteProvider : DefaultDirectRouteProvider { protected override IReadOnlyList<IDirectRouteFactory> GetActionRouteFa

我在webapi 2.2路由方面遇到了一些问题。我已将v5.2安装到我的项目中,并已修改配置以使用自定义DirectRouteProvider

public class CustomDirectRouteProvider : DefaultDirectRouteProvider
        {
            protected override IReadOnlyList<IDirectRouteFactory>
            GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
            {
                return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
                (inherit: true);
            }
        }
我犯了一个错误

找到多个与请求匹配的操作

我在这里试着做什么,有什么办法吗?要想让它发挥作用是令人沮丧的


谢谢你

丹-我自己也遇到了同样的麻烦,下面是我如何解决的。 我不确定这是否是最好的解决方案,但它对我有效

在我的route属性中,我将值为3的Order属性添加到基类的操作中。 Order属性的默认值为0,因此派生类的值为0。 基类需要具有高于派生类的Order属性

因此,在您的示例中,我相信这将允许您的代码按照您希望的方式工作:

基类中的作用

[HttpGet]
[Route("", Order=3)]
[EnableQuery]
public async virtual Task<IHttpActionResult> Get()
{
    var data = await DomainService.GetQueryable();
    if (data != null)
    {
       return Ok(data);
    }
    return NotFound();
}
[HttpGet]
[路线(“,顺序=3)]
[启用查询]
公共异步虚拟任务Get()
{
var data=await DomainService.GetQueryable();
如果(数据!=null)
{
返回Ok(数据);
}
返回NotFound();
}
派生类中的操作:

[HttpGet]
[EnableQuery]
[Route("")]
public async override Task<IHttpActionResult> Get()
{
    var data = await _skillRepository.ParentSkillsAsync();
    if (data != null)
    {
        return Ok(data);
    }
    return NotFound();
}
[HttpGet]
[启用查询]
[路线(“”)
公共异步重写任务Get()
{
var data=await_skillRepository.ParentSkillsAsync();
如果(数据!=null)
{
返回Ok(数据);
}
返回NotFound();
}

谢谢Shane!!!!这件事我已经坚持了很久了。我之前确实尝试过order属性,但是我用了错误的方法。Base被设置为0,我正在尝试将派生的值设置为1。啊@DriverDan非常欢迎你。上个周末我正好想解决这件事。我第一次也做了同样的事。我最初阅读的文档没有告诉我它是按什么顺序处理的,但仔细阅读后,它变得清晰了--一直看到底部和路线顺序区域。
[HttpGet]
[Route("", Order=3)]
[EnableQuery]
public async virtual Task<IHttpActionResult> Get()
{
    var data = await DomainService.GetQueryable();
    if (data != null)
    {
       return Ok(data);
    }
    return NotFound();
}
[HttpGet]
[EnableQuery]
[Route("")]
public async override Task<IHttpActionResult> Get()
{
    var data = await _skillRepository.ParentSkillsAsync();
    if (data != null)
    {
        return Ok(data);
    }
    return NotFound();
}