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

标签 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 { }
    }
}

对于 HTTP status codes (例如:302、404、503 等)一切正常。但是,对于 IIS status codes (例如:401.5、403.4 等),GetHttpCode 可以检索这些,因为它的返回值是一个整数吗?

最佳答案

你可能做不到。请在此处查看倒数第二个回复: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,看看是否在位级别发生了一些事情,您可以从中找出代码和子代码。

不知道有没有用。

关于c# - 如何从异常中获取 IIS 子状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787117/

相关文章:

用于键盘布局和编译器警告的 C# P/Invoke

c# - 在加载项中使用 Visual Studio 主题

c# - 通过等待每个任务异步转换 IEnumerable<Task<T>>

c# - 多个客户端的C#.NET UDP套接字异步

asp.net - 用户 ASP.NET 运行于

asp.net-mvc - 是否绝对需要手动配置 IIS6 以使用 ASP.NET MVC?

c# - 面板上显示的表格边框线 ASP NET

c# - 实时 3d 渲染导航

c# - ASP.NET 标识 : Generate random password

iis - 如何在 IIS 6 中使用多个 ISAPI 重定向 dll(每个站点都有自己的 isapi dll)