Wcf 在(每次)Web API操作之前执行代码
我有一个Web API接口,我正试图适应多租户体系结构。以前,我们有一个WCF模式,在此模式下,我们向服务传递了一个参数,即客户机ID,然后服务将其存储起来,以便在以后的代码中使用。这意味着客户端ID不必是传递给每个调用的第一个参数 我希望对Web API也这样做,即,而不是:Wcf 在(每次)Web API操作之前执行代码,wcf,asp.net-web-api,Wcf,Asp.net Web Api,我有一个Web API接口,我正试图适应多租户体系结构。以前,我们有一个WCF模式,在此模式下,我们向服务传递了一个参数,即客户机ID,然后服务将其存储起来,以便在以后的代码中使用。这意味着客户端ID不必是传递给每个调用的第一个参数 我希望对Web API也这样做,即,而不是: GetDocument(int clientId, int documentId) GetDefault(int clientId) GetImage(int clientId, int imageId) 刚刚: Ge
GetDocument(int clientId, int documentId)
GetDefault(int clientId)
GetImage(int clientId, int imageId)
刚刚:
GetDocument(int documentId)
GetDefault()
GetImage(int imageId)
但我需要一些方法来完成以下工作:
GetDefault
的调用可能如下所示:
/Document/GetDefault/1
而API是:
GetDefault()
如何实现这一点?一种方法是定制ActionFilter。请看,虽然它是关于MVC的,但其概念与WebAPI相同: ASP.NET MVC提供用于执行筛选逻辑的操作筛选器 在调用操作方法之前或之后。动作过滤器是 提供声明性方法以添加预操作和 将操作后行为添加到控制器的操作方法 例如:
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" };
}
[MyActionFilter]
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
您可以尝试自定义ActionFilter
,甚至是MessageHandler
。我很快模拟了一种使用客户id查询字符串的方法,它似乎可以工作,但没有会话状态,这就是我放置客户id的位置。我怀疑这是一种操作顺序,因此,当MessageHandler被激发时,会话状态不存在。会话状态稍后可以正常工作(我指定了一个实现iRequiresessionState的HttpControllerHandler)。加上它作为答案,我会接受的。