如何从异常中获取IIS子状态代码?

Bul*_*nes 6 c# asp.net iis-6 http-status-codes

我正在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 { }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于HTTP状态代码(例如:302,404,503等),一切都很好.但是,对于IIS状态代码(例如:401.5,403.4等),可以GetHttpCode检索这些,因为它的返回值是整数吗?

Dul*_*oar 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,看看是否在位级别上发生了一些事情,您可以从中找出代码和子代码。

不知道这是否有帮助。