HTTP模块中的响应修改

本文关键字:响应 修改 模块 HTTP | 更新日期: 2023-09-27 17:59:31

我在C#中构建了一个http模块,它只覆盖生命周期的EndRequest,检查响应标头的状态代码,并在需要时修改响应代码

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

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

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

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

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

想法?

HTTP模块中的响应修改

在发送头之前,您需要修改响应。我从来没有这样做过,但我想正确的事件应该是PreSendRequestHeaders。链路

以下是在该事件中设置标头的示例。

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