在.NET Framework中,在请求转到控制器之前检查请求的标头

6yt4nkrj  于 2023-01-06  发布在  .NET
关注(0)|答案(2)|浏览(146)

我目前正在尝试在API进入控制器之前访问它的头,我想检查它是否包含特定的头。我一直在寻找一种方法来实现中间件或类似的东西,但我还没有找到任何好的方法来使用.net framework为Web API做这件事。我只找到了.NET核心的解决方案。我也想它的全局为我所有的控制器,以避免添加这样的东西是我的控制器的每一个方法:

(!Request.Headers.Contains(requiredHeader))
      return StatusCode(HttpStatusCode.PreconditionFailed);

如果有人能在这件事上帮助我,我先谢谢你!

5kgi1eie

5kgi1eie1#

也许您可以为所有控制器使用从Controller派生的基类,并添加和重写OnActionExecuting。

t3irkdon

t3irkdon2#

像这样使用DelegatingHandler

public class MyCustomHeaderHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // Check if the request contains the required header
        if (!request.Headers.Contains("requiredHeader"))
        {
            return request.CreateResponse(HttpStatusCode.PreconditionFailed);
        }

        // else, pass the request to the next handler in the pipeline
        return await base.SendAsync(request, cancellationToken);
    }
}

并将其优先于其他注册到管道中:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

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

        // Other configurations ....
    }
}

相关问题