将自定义 header 添加到 .Net 中的所有 Swagger 响应
Add custom header to all Swagger responses in .Net
我们正在使用带有 Swagger 的 WebApi 服务器来记录端点。我们要添加 Content-Security-Policy 和 X-Frame-Options header。我们想通过拦截调用并添加自定义 headers 来实现这一点,但是我们无法找到这样做的方法。我们正在为 5.0.4 版本的 WebApi NuGet 包使用 Swashbuckle Swagger。
有没有办法拦截 Swagger 响应或任何向响应添加自定义 header 的方法?
如果您想将 headers 添加到所有响应中,一种选择是添加一个 DelegatingHandler
,它可以通过覆盖 SendAsync
方法来添加 headers .因此,您将创建一个继承自 DelegatingHandler
的 class,然后覆盖 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;
}
}
然后将 class 的实例添加到 Global.asax.cs 中 Application_Start()
的配置中:
GlobalConfiguration.Configuration.MessageHandlers.Add(new AddCustomHeadersResponseHandler());
我们正在使用带有 Swagger 的 WebApi 服务器来记录端点。我们要添加 Content-Security-Policy 和 X-Frame-Options header。我们想通过拦截调用并添加自定义 headers 来实现这一点,但是我们无法找到这样做的方法。我们正在为 5.0.4 版本的 WebApi NuGet 包使用 Swashbuckle Swagger。
有没有办法拦截 Swagger 响应或任何向响应添加自定义 header 的方法?
如果您想将 headers 添加到所有响应中,一种选择是添加一个 DelegatingHandler
,它可以通过覆盖 SendAsync
方法来添加 headers .因此,您将创建一个继承自 DelegatingHandler
的 class,然后覆盖 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;
}
}
然后将 class 的实例添加到 Global.asax.cs 中 Application_Start()
的配置中:
GlobalConfiguration.Configuration.MessageHandlers.Add(new AddCustomHeadersResponseHandler());