HTTP模块中的响应修改

时间:2011-06-18 00:22:56

标签: c# asp.net httpmodule

我在C#中构建了一个http模块,它只是覆盖生命周期的EndRequest,检查响应头的状态代码,并根据需要修改响应代码。类似的东西:

HttpContext context = ((HttpApplication)source).Context;
if (context.Response.StatusCode == 200)
{
    context.Response.StatusCode = 404;
}

当我针对localhost(真正的IIS)进行测试时,这似乎对我来说很好,但是当我启用Intranet访问并从另一台计算机进行测试时,它每次都会失败。

我通过另一台计算机测试时看到的错误是:

“发送HTTP标头后,服务器无法设置状态。”

我还注意到请求同一个文件两次,而在本地它只请求文件一次。我听到有人说输出缓冲,但我也尝试将BeginRequest响应OutputBuffer设置为true并得到相同的结果。

思想?

1 个答案:

答案 0 :(得分:4)

您需要在发送标头之前修改响应。我从来没有这样做过,但我猜错了正确的事件是PreSendRequestHeaderslink

Here's an example此事件中设置标题。

如果此事件对您不起作用,请在管道中处理程序的后期处理之后检查一些事件:http://blogs.msdn.com/b/carloc/archive/2007/12/19/application-page-and-control-lifecycle.aspx但要小心,因为您可能必须重写IIS 7集成管道的代码