根据Asp.Net团队What not to do in Asp.net提供的这些信息,您不应该在托管的HttpModule中使用PreSendRequestHeaders
。
PreSendRequestHeaders和PreSendRequestContext
建议:不要将这些事件与托管模块一起使用。
PreSendRequestHeaders和PreSendRequestContext事件可以与本机IIS模块一起使用,但不能与实现IHttpModule的托管模块一起使用。设置这些属性可能会导致异步请求出现问题。
这正是我在Image Processing Library中所做的,以确保正确的mime类型与响应一起发送。
什么是推荐的替代方法?
如果你看一下HttpApplication
页面上的MSDN's ASP.NET App Life Cycle管道,你会发现最底层的PreSendRequestHeaders
和PreSendRequestContent
事件。既然他们建议我们不要在托管的IHttpModule
s中使用这些,那么管道中的下一个最接近的事件就是EndRequest
,与PreSendRequest *事件不同,它是确定性的。
我现在无法找到有关指定响应标头的首选做法的任何信息,但这对您有用。
在BeginRequest
的处理程序中,使用HttpResponse.AddOnSendingHeaders
为该事件订阅处理程序。
这与PreSendRequestHeaders
基本相同,但它在ASP.NET管道中完全处理,因此它与PreSendRequestHeaders
所具有的本机/托管接口没有相同的问题。