我正在开发一个ASP.NET Web API应用程序,它使用自定义日期时间http标头响应客户端。虽然我已经阅读了几篇描述如何从ASP.NET / IIS中删除响应头的文章,但这个文章似乎总是很有弹性,我无法摆脱它。它似乎被放置在程序员/管理员控制之外的某个响应管道中,最后。
我知道在响应中不包含“Date”标头可能是一种不好的做法,但正如我所提到的,自定义日期时间标题(以刻度而不是字符串表示形式)使默认值为冗余;此外,这是一个私有API,所以我确切地知道谁和如何使用它。
是否可以以任何方式在IIS(v7 +)中为特定站点(或直接从Web API应用程序)删除此标头?
修改:
我试过(没有成功)以下技术:
<httpProtocol><customHeaders>
部分protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
Global.asax.cs
方法中的标头删除代码
答案 0 :(得分:4)
根据HTTP Spec,日期标题是强制性的,但我不认为适用于您的情况的条件除外:
Origin servers MUST include a Date header field in all responses, except in these cases:
1. If the response status code is 100 (Continue) or 101 (Switching
Protocols), the response MAY include a Date header field, at
the server's option.
2. If the response status code conveys a server error, e.g. 500
(Internal Server Error) or 503 (Service Unavailable), and it is
inconvenient or impossible to generate a valid Date.
3. If the server does not have a clock that can provide a
reasonable approximation of the current time, its responses
MUST NOT include a Date header field. In this case, the rules
in section 14.18.1 MUST be followed.
答案 1 :(得分:0)
这在实际的WebApi / Mvc管道中是不可能的,因此诸如动作过滤器和委托处理程序之类的选项已经完成。
相反,您可能需要实现自定义IHttpModule
并在IIS中注册它。您应阅读并遵循一篇文章here。这种方法非常简单,易于适应。
只需将该示例中的set
替换为:
HttpContext.Current.Response.Headers.Remove("Date");