如何从Web API响应中删除标头?

时间:2014-08-21 20:59:28

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

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

我们如何从ASP.NET Web API响应发送的响应中删除“X-”标头?具体而言,目前我们希望删除“X-AspNet-Version”,“X-Powered-By”和“X-SourceFiles”。

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

4 个答案:

答案 0 :(得分:4)

解-1

来自this回答

“powered 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");
}

答案 1 :(得分:2)

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

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

答案 2 :(得分: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 :(得分:1)

正如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/