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

C# 如何从异常中获取IIS子状态代码?,c#,asp.net,iis-6,http-status-codes,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)

我使用
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 { }
    }
}

对于(例如:302404503等)来说,一切都很好。但是,对于(例如:401.5、403.4等),是否可以
GetHttpCode
检索这些,因为其返回值是整数?

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

HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
    errorcode = httpEx == null ? 0 : httpex.GetHttpCode();

你可能不能。请参阅此处的倒数第二个响应:。HTTP RFC没有定义子代码()。看起来它可能是MS唯一的东西-请参阅第一个链接中的最后一个响应,该链接指向此处:。虽然这就是如何设置子状态码,而不是检索它,但对我来说有趣的是,它仅在“IIS 7.0中的集成管道模式以及至少.NET Framework 3.0版本”中受支持

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


不知道这是否有用。

这将如何帮助我检索IIS状态代码,如401.5或403.4?GetHttpCode仍然返回一个整数。+1。我非常喜欢使用InnerException的for循环思想。您是否找到一些代码来提取这些IIS错误代码?仅供参考:您的代码忽略了显示对
Server.ClearError()的任何调用如果不在其中,您应该添加它。此外,从MSDN链接:“当您设置SubStatusCode属性时,…代码永远不会作为请求的最终响应的一部分发送。”