2009-04-24 3 views
6

예외에서 IIS 하위 상태 코드를 얻으려면 어떻게합니까?

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 { } 
    } 
} 
GetHttpCode HTTP status codes (예 : 302, 404, 503 등)의 경우 모든 것이 잘 작동합니다. 그러나 IIS status codes (예 : 401.5, 403.4 등)의 경우 GetHttpCode에서 반환 값이 정수이므로이 값을 검색 할 수 있습니까?

+0

+1. ** InnerException **을 사용하여 ** for 루프 ** 아이디어를 정말 좋아합니다. 이 IIS 오류 코드를 가져 오는 코드를 찾았습니까? – jp2code

+0

FYI : 'Server.ClearError();'에 대한 호출을 표시하지 않도록 코드가 무시되었습니다.이 코드가 없으면 추가해야합니다. – jp2code

답변

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를 조사하여 코드 및 하위 코드를 파악할 수있는 비트 수준에서 진행중인 작업이 있는지 확인하는 것입니다.

도움이 될지 모르겠다.

+0

또한 MSDN 링크에서 : "SubStatusCode 속성을 설정하면 코드가 요청에 대한 최종 응답의 일부로 전송되지 않습니다." –

-2

내부 예외는 원하지 않습니다. 원하는 항목 :

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

이 방법을 사용하면 401.5 또는 403.4와 같은 IIS 상태 코드를 검색하는 데 도움이됩니까? GetHttpCode는 여전히 정수를 반환합니다. – Bullines

관련 문제