IHttpModule中的StatusCode总是200?

时间:2009-06-09 09:47:44

标签: asp.net iis httpmodule ihttpmodule

我有一个自定义IHttpModule,可以处理所有可用事件并将HttpContext.Current.Response.StatusCode记录到文件中。

我的web.config<httpModules>中不包含任何其他模块,因此所有错误都会提升到浏览器。

虽然浏览器显示404,但日志文件中有200个(Ok)条目,而不是单个404.

我错过了什么?


更新

.aspx结尾的网址在404事件中确实有PreSendRequestHeaders StatusCode, 但是,例如,.pdf的网址在所有活动中显示StatusCode 200

3 个答案:

答案 0 :(得分:0)

当有404时你的模块是否真的在运行?

您是否已在模块中使用断点将调试器附加到应用程序 - 当您请求不存在的.aspx页面时是否会受到影响?当您请求不存在的文件或目录时是否会受到影响?

加快IIS的设置,ASP.NET可能无法查看这些错误 - 例如,它不会处理somepage.html或者missing.gif的请求。

答案 1 :(得分:0)

我有同样的问题,我解决了它在HttpException的处理程序中转换当前异常。然后,您可以获取Http错误代码。

Exception exception = HttpContext.Current.Server.GetLastError();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
    int httpCode = httpException.GetHttpCode();
}

来源:http://www.digitallycreated.net/Blog/57/getting-the-correct-http-status-codes-out-of-asp.net-custom-error-pages

希望有所帮助:)

答案 2 :(得分:0)

聚会有点晚了。尝试在您的模块的 web.config 中删除 preCondition="managedHandler"