我在使用webapi 2.2路由时遇到了一些麻烦。我已将v5.2安装到我的项目中并修改了我的配置以使用Custom DirectRouteProvider
public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
protected override IReadOnlyList<IDirectRouteFactory>
GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
(inherit: true);
}
}
现在我已经设置了一个基本控制器,其中包含我想要覆盖的方法,例如
[HttpGet]
[Route("")]
[EnableQuery]
public async virtual Task<IHttpActionResult> Get()
{
var data = await DomainService.GetQueryable();
if (data != null)
{
return Ok(data);
}
return NotFound();
}
如果我运行项目并调用类似http://localhost:3000/somecontroller
的端点,则会调用上面的Get()方法。
如果在某个控制器内我尝试
[HttpGet]
[EnableQuery]
[Route("")]
public async override Task<IHttpActionResult> Get()
{
var data = await _skillRepository.ParentSkillsAsync();
if (data != null)
{
return Ok(data);
}
return NotFound();
}
我收到错误
找到了与请求匹配的多项操作
反正有没有做我在这里尝试的事情?试图让它发挥作用令人沮丧。
谢谢
答案 0 :(得分:0)
在我的路由属性上,我将Order属性的值3添加到基类的操作中。 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]
[EnableQuery]
[Route("")]
public async override Task<IHttpActionResult> Get()
{
var data = await _skillRepository.ParentSkillsAsync();
if (data != null)
{
return Ok(data);
}
return NotFound();
}