向.Net中的所有Swagger响应添加自定义标头

Vap*_*rov 3 .net c# asp.net-web-api swagger swashbuckle

我们正在使用带有Swagger的WebApi服务器来记录端点。我们要添加Content-Security-Policy和X-Frame-Options标头。我们想通过拦截调用并添加自定义标头来实现这一点,但是我们找不到解决方法。我们将Swashbuckle Swagger用于5.0.4版本的WebApi NuGet软件包。

有没有办法拦截Swagger响应或以任何方式向响应添加自定义标头?

str*_*t01 5

如果您想将标头添加到所有响应中,一个选择是添加一个DelegatingHandler可以通过重写SendAsync方法添加标头的方法。因此,您将创建一个继承自然DelegatingHandler后再覆盖的类SendAsync。例如:

public class AddCustomHeadersResponseHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
         var response = await base.SendAsync(request, cancellationToken);

         response.Headers.Add("Content-Security-Policy", "yourSecurityValue");

         response.Headers.Add("X-Frame-Options", "yourFrameOptions");

         return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后Application_Start()在Global.asax.cs 中将类的实例添加到您的配置中:

GlobalConfiguration.Configuration.MessageHandlers.Add(new AddCustomHeadersResponseHandler()); 
Run Code Online (Sandbox Code Playgroud)