2009-04-24 21 views
6

私はこのような方法でHttpModuleで例外を処理しています:HTTP status codesについては例外から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 { } 
    } 
} 

を(例:302、404、503、など)すべてが素晴らしい作品。しかし、IIS status codes(例:401.5,403.4など)の場合、GetHttpCodeは戻り値が整数なのでこれらを取得できますか?

+0

+1。私は** InnerException **を使って** forループのアイデアを本当に好きです。これらのIISエラーコードを取得するコードを見つけましたか? – jp2code

+0

FYI:あなたのコードは、 'Server.ClearError();'の呼び出しを表示しないように無視されています。 – jp2code

答えて

2

することができない場合があります。最後の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

関連する問題