我在C#中构建了一个只覆盖生命周期的EndRequest的http模块,检查响应头的状态代码并在需要时修改响应代码。喜欢的东西:HTTP模块中的响应修改
HttpContext context = ((HttpApplication)source).Context;
if (context.Response.StatusCode == 200)
{
context.Response.StatusCode = 404;
}
这似乎很好地工作对我来说,当我测试它针对本地主机(实际IIS),但是当我能够从另一台计算机联网访问和测试失败每次。
,当我通过另一台计算机测试我所看到的错误是:
“ HTTP标头后,服务器不能设置状态已发送”
我也注意到,请求两次相同的文件,而在本地它只请求一次文件。我听到有人说输出缓冲,但我也尝试将BeginRequest响应OutputBuffer设置为true,并得到相同的结果。
想法?
只是想我会回来,并关闭了这一点。这里有两个问题,其中第一个问题解决了你的建议。第二个问题与管道有关,但不是asp.net的。 IIS有一个“功能”用于在发送某些状态码时返回特定的错误页面。这发生在.NET处理后,但你可以关闭它。如果启用“详细错误”并删除状态代码的处理程序,则会得到未修改的原始页面内容。默认情况下,仅限本地。 – pinvoke