新的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
对象的任何地方找到任何标题。对我而言,这表明我可能需要深入挖掘管道,但我不知道从哪里开始或者这是否正确。
答案 0 :(得分:4)
来自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>
您可以在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/