【发布时间】:2016-11-11 19:24:35
【问题描述】:
在 ASP.NET Core 1.0 中,每个响应都将包含标头 Server: Kestrel。我想使用中间件删除此标头以及 X-Power-By 等其他标头。
我知道我们可以通过设置以下内容来删除主机配置中的 Kestrel 标头,但我想使用中间件来做到这一点(实际上,当我们有 Httpmodule 时,我们可以这样做,所以我正在学习同样的事情)。我试了一下还是不行。
new WebHostBuilder()
.UseKestrel(c => c.AddServerHeader = false)
尝试过的代码:
public class HeaderRemoverMiddleware
{
private readonly RequestDelegate _next;
public HeaderRemoverMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext)
{
httpContext.Response.OnStarting(callback: removeHeaders, state: httpContext);
await _next.Invoke(httpContext);
}
private Task removeHeaders(object context)
{
var httpContext = (HttpContext)context;
if (httpContext.Response.Headers.ContainsKey("Server"))
{
httpContext.Response.Headers.Remove("Server");
}
return Task.FromResult(0);
}
}
public static class HeaderRemoverExtensions
{
public static IApplicationBuilder UseServerHeaderRemover(this IApplicationBuilder builder)
{
return builder.UseMiddleware<HeaderRemoverMiddleware>();
}
}
【问题讨论】:
-
布尔属性应该可以工作。
-
我知道它会起作用,但我想从一个地方删除所有此类标题。
-
new WebHostBuilder().UseKestrel(c => c.AddServerHeader = false) 为我工作!
标签: asp.net-core .net-core asp.net-core-1.0 asp.net-core-middleware