2009-04-24 13 views
6

Ich Ausnahmen mit einem HttpModule in einer Art und Weise, wie diese Handhabung:Wie kann ich den IIS-Substatuscode von einer Exception abrufen?

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

Für HTTP status codes (ex: 302, 404, 503, etc.) alles funktioniert super. Jedoch für IIS status codes (ex: 401.5, 403.4, usw.), kann GetHttpCode diese abrufen, da sein Rückgabewert eine ganze Zahl ist?

+0

+1. Ich mag das ** for ** Schleife ** Idee mit der ** InnerException **. Haben Sie jemals ein wenig Code gefunden, um diese IIS-Fehlercodes zu ziehen? – jp2code

+0

FYI: Ihr Code hat es versäumt, irgendeinen Aufruf von 'Server.ClearError() anzuzeigen;' Wenn das nicht drin ist, sollten Sie es hinzufügen. – jp2code

Antwort

2

Sie können möglicherweise nicht. Siehe die vorletzte Antwort hier: http://www.velocityreviews.com/forums/t73739-sending-status-as-4011.html. Der HTTP-RFC definiert keine Untercodes (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Es sieht so aus, als ob es nur eine MS-Sache ist - siehe letzte Antwort in der ersten Verbindung, die dann auf hier zeigt: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode.aspx. Während ich den Substatuscode einstellen und nicht abrufen kann, ist es für mich interessant, dass er nur "mit dem integrierten Pipeline-Modus in IIS 7.0 und mindestens der .NET Framework-Version 3.0 unterstützt wird". Die einzige andere Sache, die ich mir vorstellen kann, ist in das HRESULT in der ErrorCode-Eigenschaft auf der HttpException zu sehen und zu sehen, ob etwas auf der Bit-Ebene geht, wo Sie den Code und Sub-Code daraus herausfinden können.

Weiß nicht, ob das hilft oder nicht.

+0

Weiter von dieser MSDN-Verknüpfung: "Wenn Sie die SubStatusCode-Eigenschaft festlegen, wird der Code nie als Teil der endgültigen Antwort auf die Anforderung gesendet." –

-2

Sie wollen nicht die innere Ausnahme. Sie möchten:

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

Wie kann ich einen IIS-Statuscode wie 401.5 oder 403.4 abrufen? GetHttpCode gibt immer noch eine ganze Zahl zurück. – Bullines

Verwandte Themen