这个问题在这里已有答案:
新的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
对象的任何地方找到任何标题。对我来说,这表明我可能需要深入挖掘管道,但我不知道从哪里开始或者这是否正确。
来自this回答
“powered by”是IIS中的自定义标头。更改它取决于您使用的IIS版本。有关如何修改或删除的一些信息,请参阅here:
要在Application Start事件中删除MVC标头,请在Global.asax中:
MvcHandler.DisableMvcResponseHeader = true;
把它放在web.config中去掉X-AspNet-Version标题:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
您可以在Application_EndRequest()
中更改任何标题或任何内容
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
我实现的替代解决方案是定义您自己的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");
}
}
}
如果您使用的是Owin,则可以将其添加到启动类中以删除“服务器”标题。
app.Use((context, next) =>
{
context.Response.Headers.Remove("Server");
return next.Invoke();
});
app.UseStageMarker(PipelineStage.PostAcquireState);
正如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/所示