我在C#中构建了一个http模块,它只是覆盖生命周期的EndRequest,检查响应头的状态代码,并根据需要修改响应代码。类似的东西:
HttpContext context = ((HttpApplication)source).Context;
if (context.Response.StatusCode == 200)
{
context.Response.StatusCode = 404;
}
当我针对localhost(真正的IIS)进行测试时,这似乎对我来说很好,但是当我启用Intranet访问并从另一台计算机进行测试时,它每次都会失败。
我通过另一台计算机测试时看到的错误是:
“发送HTTP标头后,服务器无法设置状态。”
我还注意到请求同一个文件两次,而在本地它只请求文件一次。我听到有人说输出缓冲,但我也尝试将BeginRequest响应OutputBuffer设置为true并得到相同的结果。
思想?
答案 0 :(得分:4)
您需要在发送标头之前修改响应。我从来没有这样做过,但我猜错了正确的事件是PreSendRequestHeaders
。 link
Here's an example此事件中设置标题。
如果此事件对您不起作用,请在管道中处理程序的后期处理之后检查一些事件:http://blogs.msdn.com/b/carloc/archive/2007/12/19/application-page-and-control-lifecycle.aspx但要小心,因为您可能必须重写IIS 7集成管道的代码