6

我正在以如下方式处理异常HttpModule

int errorCode = 500;
HttpApplication httpApp = (HttpApplication)sender;

try
{
    if (httpApp.Server != null)
    {
        Exception ex;

        for (ex = httpApp.Server.GetLastError(); ex != null; ex = ex.InnerException)
        {
            try
            {
                HttpException httpEx = ex as HttpException;
                if (httpEx != null)
                    errorCode = httpEx.GetHttpCode();

                // ... retrieve appropriate content based on errorCode
            }
            catch { }
    }
}

对于HTTP 状态代码(例如:302、404、503 等),一切正常。但是,对于IIS 状态码(例如:401.5、403.4 等),是否可以将GetHttpCode这些作为其返回值是整数来检索?

4

2 回答 2

2

你可能做不到。请参阅此处的倒数第二个响应:http ://www.velocityreviews.com/forums/t73739-sending-status-as-4011.html 。HTTP RFC 没有定义子代码 ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html )。看起来它可能是唯一的 MS - 请参阅第一个链接中的最后一个响应,然后指向此处:http: //msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode.aspx . 虽然这是设置子状态码而不是检索它的方法,但对我来说有趣的是,它仅受“IIS 7.0 中的集成管道模式和至少 .NET Framework 3.0 版”的支持。

我唯一能想到的另一件事是查看 HttpException 的 ErrorCode 属性中的 HRESULT,看看是否在位级别发生了一些事情,您可以从中找出代码和子代码。

不知道这是否有帮助。

于 2009-04-24T20:24:02.740 回答
-2

你不想要内部异常。你要:

HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
    errorcode = httpEx == null ? 0 : httpex.GetHttpCode();
于 2009-04-24T19:02:56.197 回答