我有一个Web API接口,我正在尝试适应多租户架构.以前,我们有一个WCF模式,我们将一个参数client id传递给服务,然后将其存储在稍后的代码中.这意味着Client Id不必是传递给每个调用的第一个参数.
我想对Web API做同样的事情,即不要:
GetDocument(int clientId,int documentId)@H_404_5@GetDefault(int clientId)@H_404_5@GetImage(int clientId,int imageId)
才刚刚:
GetDocument(int documentId)@H_404_5@GetDefault()@H_404_5@GetImage(int imageId)
但我需要一些方法来做到以下几点:
>从路线获取clientId@H_404_5@>将此值放入我所拥有的状态对象中
所有在呼叫实际执行之前.我有点认为路线会被重写 – 我很好,路由必须有客户端ID,而不是我的API.因此,对GetDefault的调用可能如下所示:
/文档/ GetDefault / 1
虽然API是
GetDefault()
思考? TIA.
解决方法
一种方法是自定义ActionFilter.请参阅
here,虽然它与MVC有关,但概念与WebAPI相同:
ASP.NET MVC provides Action Filters for executing filtering logic@H_404_5@ either before or after an action method is called. Action Filters are@H_404_5@ custom attributes that provide declarative means to add pre-action and@H_404_5@ post-action behavior to the controller’s action methods.
例如:
public class MyActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { //.... } public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { //.... } }
并使用它来装饰你的API控制器/动作:
[MyActionFilter] public IEnumerable<string> Get() { return new string[] { "value1","value2" }; }