在每个请求上执行代码

时间:2012-10-17 02:01:58

标签: asp.net asp.net-web-api

我需要运行一个验证例程,查找每个服务器请求的头信息。我会在ASP.NET MVC或ActionInvoker中使用OnActionExecuting来运行每个请求,但我一直在寻找Web API,并没有找到具体的东西。

如果可以为同步和异步实现某些功能,那将是最好的。

1 个答案:

答案 0 :(得分:8)

对于Web API,您应该使用MessageHandlers

消息处理程序始终先在管道中的其他任何内容之前运行,并且它们也能够最后运行(在Web API返回响应之后,就在响应到达客户端之前)。

有关消息处理程序的更多信息,请访问此处 - http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

这是一个简单的例子,验证API密钥:

public class WebApiKeyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        string apikey = HttpUtility.ParseQueryString(request.RequestUri.Query).Get("apikey");
        if (apikey != "something")
        {
            HttpResponseMessage response = request.CreateErrorResponse(HttpStatusCode.Forbidden, "You can't use the API without the key.");
            throw new HttpResponseException(response);
        }
        else
        {
            return base.SendAsync(request, cancellationToken);
        }
    }
}

在此示例中,仅使用密钥“something”的请求:即 / api / values /?apikey = something 将被允许,其他所有将被拒绝。

在您的情况下,您只需访问 request.Headers 并验证您需要的任何内容。