在 .NET Framework 中将请求发送到控制器之前检查请求头

问题描述 投票:0回答:2

我当前正在尝试在 API 进入控制器之前访问传入请求的标头,并且我想检查它是否包含特定标头。我一直在寻找一种方法来实现中间件或类似的东西,但我还没有找到任何使用 .net 框架为 Web API 实现的好方法,我只找到了 .NET Core 的解决方案。 另外,我希望对我的所有控制器进行全局设置,以避免在我的控制器的每个方法中添加类似的内容:

(!Request.Headers.Contains(requiredHeader))
      return StatusCode(HttpStatusCode.PreconditionFailed);
c# .net controller middleware webapi
2个回答
1
投票

像这样使用

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 ....
    }
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.