【问题标题】:How do I remove headers from my Web API response? [duplicate]如何从我的 Web API 响应中删除标头? [复制]
【发布时间】:2014-10-15 15:31:40
【问题描述】:

新的 Web API 2.0 项目,因此我们可以完全控制整个请求/响应管道。

我们如何从 ASP.NET Web API 响应发送的响应中删除“X-”标头?具体来说,目前且随时可能发生变化,我们希望删除“X-AspNet-Version”、“X-Powered-By”和“X-SourceFiles”。

在从控制器返回 HttpResponseMessage 之前,我们尝试了 result.Headers.Remove("X-AspNet-Version");。这不起作用,因为标题仍然出现在 Fiddler 中。我也没有在HttpResponseMessage 对象的任何地方找到任何标题。对我来说,这表明我可能需要更深入地研究管道,但我不确定从哪里开始,或者这是否正确。

【问题讨论】:

标签: c# asp.net-web-api asp.net-web-api2 .net-4.5


【解决方案1】:

解决方案-1

来自this的回答

“power by”是 IIS 中的自定义标头。更改它取决于您使用的 IIS 版本。有关如何修改或删除的一些信息,请参阅here

要删除 MVC 标头,在 Global.asax 中,在 Application Start 事件中:

MvcHandler.DisableMvcResponseHeader = true;

把这个放在 web.config 中去掉 X-AspNet-Version 标头:

<system.web>
    <httpRuntime enableVersionHeader="false" />
</system.web>

解决方案-2

您可以更改Application_EndRequest() 中的任何标题或任何内容,试试这个

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}

【讨论】:

  • 感谢所有在 Web Api 2 中工作,除了 MvcHandler.DisableMvcResponseHeader = true;x-powered-by 未显示在 Application_EndRequest 的标头列表中
【解决方案2】:

我实施的替代解决方案是定义您自己的 Http 模块并在 OnPreSendRequestHeaders 处理程序中删除标头。这会从所有 ASP.NET 和 Web API 请求以及静态内容请求中删除标头。您可以在多个项目中重复使用它。

public class RemoveHttpHeadersModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        Guard.ArgumentNotNull(context, "context");

        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;

        if (application != null)
        {
            HttpResponse response = application.Response;
            response.Headers.Remove("Server");
            response.Headers.Remove("X-Powered-By");
        }
    }
}

【讨论】:

    【解决方案3】:

    如果您使用的是 Owin,则可以将其添加到您的启动类中以删除“服务器”标头。

            app.Use((context, next) =>
            {
                context.Response.Headers.Remove("Server");
                return next.Invoke();
            });
            app.UseStageMarker(PipelineStage.PostAcquireState);
    

    【讨论】:

    • 您是自托管还是在 IIS 中托管?似乎不适用于自托管的 OWIN api
    • 我将 WebApi2 与 OWIN 一起使用,这不起作用
    【解决方案4】:

    正如 Slippery Pete 所指出的,这个问题已经在How to remove ASP.Net MVC Default HTTP Headers?得到了回答

    另一种解决方案是在 EndRequest 信号处修改请求,如下所示 http://tech.trailmax.info/2013/02/remove-server-http-header-from-asp-net-mvc-application/

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 2018-07-09
      • 2018-06-11
      • 2012-06-24
      • 1970-01-01
      • 2021-06-22
      • 2013-06-02
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多