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