ASP.NET Web API 2中的路由别名

时间:2015-06-30 20:28:39

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

我有一个Web API,允许用户访问/操作“属于”其他用户的资源。它包含许多类似的路线:

/users/{userId}/resource

我想要代表当前经过身份验证的用户执行相同操作的相应路由集:

/resource

理想情况下,我想让第二组路由工作,而不会使控制器中的操作数量增加一倍,但我很难找到合适的钩子。理想情况下,我想添加拦截每个请求的MessageHandler(或其他东西),检查它是否与路由匹配,如果不匹配,请将经过身份验证的用户的“users /”+ ID添加到路由中并再次检查。实现这一目标的最佳方法是什么?

一个约束:我正在使用属性路由来实现第一组路由,理想情况下,如果不对此进行贬义,请将其拉​​出来。

1 个答案:

答案 0 :(得分:1)

钩子是动作选择器,你可以在这里看到:Routing and Action Selection in ASP.NET Web API

您可以实现自己的动作选择器来实现您想要的效果。以下是如何执行此操作的示例:Magical Web API action selector。从同一页面:

  

我们将创建一个实现IActionSelector的类,因为这样我们就可以插入GlobalConfiguration.Configuration.Services下Web API提供的钩子。