6

私は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 ステータス コード(例: 302、404、503 など) の場合、すべてうまく機能します。ただし、IIS ステータス コード(例: 401.5、403.4 など) の場合GetHttpCode、戻り値が整数であるため、これらを取得できますか?

4

2 に答える 2

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 だけのもののようです - 最初のリンクの最後の応答を参照してください。 . これはサブステータスコードを取得するのではなく設定する方法ですが、私にとって興味深いのは、「IIS 7.0 の統合パイプライン モードと少なくとも .NET Framework バージョン 3.0」でのみサポートされることです。

私が考えることができる他の唯一のことは、HttpException の ErrorCode プロパティの HRESULT を調べて、そこからコードとサブコードを把握できるビット レベルで何かが起こっているかどうかを確認することです。

それが役立つかどうかはわかりません。

于 2009-04-24T20:24:02.740 に答える
-2

内部例外は必要ありません。あなたがしたい:

HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
    errorcode = httpEx == null ? 0 : httpex.GetHttpCode();
于 2009-04-24T19:02:56.197 に答える