我有一个Web API接口,我正在尝试适应多租户架构。以前,我们有一个WCF模式,我们将一个参数客户端ID传递给服务,然后将其存储在以后用于代码。这意味着客户端ID不必是传递给每个调用的第一个参数。
我想对Web API做同样的事情,即不要:
GetDocument(int clientId, int documentId)
GetDefault(int clientId)
GetImage(int clientId, int imageId)
才刚刚:
GetDocument(int documentId)
GetDefault()
GetImage(int imageId)
但我需要一些方法来做到以下几点:
所有在呼叫实际执行之前。我有点认为路线会被重写 - 我很好,路由必须有客户端ID,而不是我的API。所以对GetDefault
的调用可能如下:
/Document/GetDefault/1
而API是:
GetDefault()
我怎样才能做到这一点?
一种方法是自定义ActionFilter。请参阅here,虽然它与MVC的概念与WebAPI相同:
ASP.NET MVC提供了Action Filter,用于在调用action方法之前或之后执行过滤逻辑。操作过滤器是自定义属性,提供声明性方法,以将操作前和操作后行为添加到控制器的操作方法中。
例如:
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" };
}