用于预请求的Web Api Handler

时间:2018-03-06 09:29:47

标签: asp.net-web-api delegatinghandler

我正在使用Web Api 2.0的委托处理程序拦截我的所有Web Api调用,我需要在执行之前采取行动。

我按照Microsoft Docs中的说明实现了以下代码:

public class MyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(
       HttpRequestMessage request, 
       CancellationToken cancellationToken)
    {
        // do something
        return base.SendAsync(request, cancellationToken);
    }
}

注册处理程序:

config.MessageHandlers.Add(new MyHandler());

但是这个代码是在控制器方法之后执行的,这不是我需要的。我想在之前执行处理程序,就像我在旧的Action Filter for MVC的预执行方法一样。

注意 我没有使用动作过滤器,因为在Microsfot Docs上他们说停止使用Action Api 2.0动作过滤器,因为它们将被弃用。那么,使用Web Api时有什么选择呢?

1 个答案:

答案 0 :(得分:1)

您的问题很可能是在不同的任务中并发执行。这是因为您没有await base.SendAsync()来电。

这些方面的某些内容应该可以解决您的问题:

var response = await base.SendAsync(request, cancellationToken);
return response;

您实施的MessageHandler的执行是通过您通过config.MessageHandlers.Add(new MyHandler());向其注册的Web API管道执行的,并且应独立于任何操作过滤器

如果您正在寻找附加信息,请查看here