【发布时间】:2016-08-26 21:31:07
【问题描述】:
为什么我不能将 X-Powered-By 作为我正在执行的中间件的一部分删除?如果我把它放在 web.config 中,我可以删除它,但如果我把它放在中间件中,我就不能删除它。我正在删除中间件“服务器”中的另一个标头:“Kestrel”,它可以工作并告诉我我的中间件正在执行。
我正在使用 Visual Studio 2015、ASP.Net Core Web 应用程序 (.NET Framework)、1.0.0-rc2-final
我的中间件
public class ManageHttpHeadersMiddleware
{
private RequestDelegate _next;
public ManageHttpHeadersMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
context.Response.OnStarting(() =>
{
context.Response.Headers.Remove("Server");
context.Response.Headers.Remove("X-Powered-By");
return Task.CompletedTask;
});
await _next(context);
}
}
我的 Startup.Configure 方法如下所示
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddSerilog(new LoggerConfiguration()
.ReadFrom.ConfigurationSection(Configuration.GetSection("Serilog"))
.CreateLogger())
.AddDebug();
app.UseMiddleware<ManageHttpHeadersMiddleware>();
app.UseJwtBearerAuthentication();
app.UseMvc();
app.UseSwaggerGen();
app.UseSwaggerUi();
}
所以我的问题是:
- 是不是因为我执行中间件的顺序 启动配置?
- 是不是因为我正在执行的事件 中间件?我曾尝试使用 OnCompleted,但显然为时已晚,并且没有删除 "Server" : "Kestrel"
- 是不是因为它 由 Kestrel 或 IIS 在 Azure 中添加,唯一的删除方法是通过 web.config ?
我知道您可能会争辩说我有一个解决方法以及我的问题是什么,但是在相同的代码位置实现相同的要求、帮助可维护性等会很好。
【问题讨论】:
-
这个问题可能重复stackoverflow.com/questions/38279974/…。这个问题是我自己问的。我只是想知道您是否可以删除中间件中的 Server 标头?
标签: c# asp.net-core header middleware