小编Jam*_*mes的帖子

asp.net核心删除X-Powered-By无法在中间件中完成

为什么我不能删除X-Powered-By作为我正在执行的中间件的一部分?如果我放入web.config,我可以删除它,但如果我把它放在中间件中,我可以删除它.我正在删除中间件"服务器"中的另一个标头:"Kestrel",它工作并告诉我我的中间件正在执行.

我正在使用Visual Studio 2015,ASP.Net核心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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的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();
    }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 是因为我在Startup.Configure中执行中间件的顺序?
  2. 是因为我在中间件中执行的事件?我已经尝试过使用OnCompleted,但显然已经很晚了,不会删除"Server":"Kestrel"
  3. 是因为它是由Azure中的Kestrel或IIS添加的,唯一的删除方法是通过web.config吗?

我知道你可以说我有一个解决方法,我的问题是什么,但在相同的代码位置实现相同的要求,以帮助可维护性等等会很好.

middleware header asp.net-core

6
推荐指数
2
解决办法
5137
查看次数

标签 统计

asp.net-core ×1

header ×1

middleware ×1