Asp.net web api WebApi 2.2 basecontroller,其端点可以通过路由覆盖
我在webapi 2.2路由方面遇到了一些问题。我已将v5.2安装到我的项目中,并已修改配置以使用自定义DirectRouteProviderAsp.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
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();
}