代码之家  ›  专栏  ›  技术社区  ›  Bullines

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

  •  6
  • Bullines  · 技术社区  · 17 年前

    我正在处理异常情况 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 IIS status codes (例如:401.5、403.4等),可以 GetHttpCode 当它的返回值是整数时,是否检索这些?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Dullroar    17 年前

    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

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

    不知道这是否有帮助。

        2
  •  -2
  •   Keltex    17 年前

    你不想要内在的例外。你想要:

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