Hen*_*sen 13 wcf-web-api asp.net-web-api
我需要隐藏ASP.NET和IIS生成的某些标头,并在ASP.NET WebAPI服务的响应中返回.我需要隐藏的标题是:
该服务早先在WCF中托管,并且通过订阅PreSendRequestHeaders和操作HttpContext.Current.Response.Headers在HttpModule中完成隐藏.使用ASP.NET WebAPI,现在所有内容都是基于任务的,因此HttpContext.Current为null.我试图插入一个消息处理程序并操纵返回的HttpResponseMessage,但标题不存在于该阶段.可以在IIS设置中删除X-Powered-By,但是删除其余部分的建议方法是什么?
Ali*_*tad 11
问题是每个都添加在不同的点:
Server:由IIS添加.虽然您似乎已经使用HttpModule删除它,但不确定它是否可以关闭.X-AspNet-Version:在HttpResponse课堂上Flush时由System.Web.dll添加X-AspNetMvc-Version:MvcHandler在System.Web.dll中添加.它可以被覆盖,所以这个应该没问题.X-Powered-By 通过IIS,但可以像你说的那样关闭.我认为你最好的选择仍然是使用HttpModules.
Sud*_*hra 10
为了通过谷歌/ bing搜索降落在这里的人的利益::以下是步骤摘要:
第1步:创建一个派生自IHttpModule的类(以及在完成后清理IDisposable):
public class MyCustomModule : IHttpModule, IDisposable
{
private HttpApplication _httpApplication
private static readonly List<string> HeadersToCloak = new List<string>
{
"Server",
"X-AspNet-Version",
"X-AspNetMvc-Version",
"X-Powered-By"
};
..
}
Run Code Online (Sandbox Code Playgroud)
步骤2:获取IHttpModule.Init方法中的内部上下文的引用,并为PreSendRequestHeaders事件分配事件处理程序:
public void Init(HttpApplication context)
{
_httpApplication = context;
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
Run Code Online (Sandbox Code Playgroud)
第3步:现在可以删除标题,如下所示:
private void OnPreSendRequestHeaders(object sender, EventArgs e)
{
if (null == _httpApplication)
{
return;
}
if (_httpApplication.Context != null)
{
var response = _httpApplication.Response;
HeadersToCloak.ForEach(header => response.Headers.Remove(header));
}
}
Run Code Online (Sandbox Code Playgroud)
步骤4:现在在system.webserver下的root web.config中注册此模块(如果在此处运行IIS 7.0集成模式,请参阅更多详细信息):
<configuration>
<system.webServer>
<modules>
<add name="MyCustomModule" type="<namespace>.MyCustomModule "/>
</modules>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
6816 次 |
| 最近记录: |