我有一个Web API,允许用户访问/操作“属于”其他用户的资源。它包含许多类似的路线:
/users/{userId}/resource
我想要代表当前经过身份验证的用户执行相同操作的相应路由集:
/resource
理想情况下,我想让第二组路由工作,而不会使控制器中的操作数量增加一倍,但我很难找到合适的钩子。理想情况下,我想添加拦截每个请求的MessageHandler(或其他东西),检查它是否与路由匹配,如果不匹配,请将经过身份验证的用户的“users /”+ ID添加到路由中并再次检查。实现这一目标的最佳方法是什么?
一个约束:我正在使用属性路由来实现第一组路由,理想情况下,如果不对此进行贬义,请将其拉出来。
答案 0 :(得分:1)
钩子是动作选择器,你可以在这里看到:Routing and Action Selection in ASP.NET Web API。
您可以实现自己的动作选择器来实现您想要的效果。以下是如何执行此操作的示例:Magical Web API action selector。从同一页面:
我们将创建一个实现IActionSelector的类,因为这样我们就可以插入GlobalConfiguration.Configuration.Services下Web API提供的钩子。