3

我一直在尝试摆脱在我的自托管 webapi2 应用程序上返回“Microsoft-HTTPAPI/2.0”的“服务器”标头,该应用程序作为 azure 服务结构上的无状态服务托管。我尝试过但没有奏效的事情:

我尝试实现一个 IFilter 以从 webapi 服务中删除标头,但调试应用程序显示标头在那时无法删除。

还尝试替换导致将新值附加到“Microsoft-HTTPAPI/2.0”值的值。

我试图在 app.config 文件中设置 webserver 标志(有点像将它用作 web.config),但没有运气。

我试图覆盖 OWIN 管道的 OnSerdingHeaders 事件,但“服务器”标头没有删除,它显然会在更晚的阶段添加。

我尝试了所有可以在网上找到的关于使用应用程序生成器清除代码中的服务器的建议。

我尝试实现一个自定义委托处理程序来清除/覆盖标题,但也没有运气。

我什至尝试篡改调试机器上的注册表只是为了检查,但这也没有成功。

我的笔测试人员坚持要摆脱它。还有其他方法吗?

提前致谢!

4

1 回答 1

1

以下中间件解决了这个问题:

public class RemoveServerHeaderMiddleware
{
    private readonly RequestDelegate next;

    public RemoveServerHeaderMiddleware(RequestDelegate next)
    {
        this.next = Argument.NotNull(next, nameof(next));
    }

    public async Task Invoke(HttpContext context)
    {
        context.Response.OnStarting(() =>
        {
            context.Response.Headers.Add("Server", string.Empty);

            return Task.CompletedTask;
        });

        await this.next(context).ConfigureAwait(false);
    }
}

当然,别忘了注册中间件:

app.UseMiddleware<RemoveServerHeaderMiddleware>();

该解决方案基于以下链接:

https://github.com/aspnet/HttpSysServer/issues/445

https://blogs.msdn.microsoft.com/timomta/2016/12/03/how-to-remove-the-server-header-from-weblistener/

于 2019-07-17T07:07:44.153 回答