12

エラーを処理するための Global.aspx に次のものがあります。

void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    if (exception != null)
    {
        //Log
        if (HttpContext.Current.Server != null)
        {
           HttpContext.Current.Server.Transfer("/siteerror.aspx");
        }
    }
}

これはほとんどの場合機能しますが、Server.Transfer に入らない場合があります。何らかの理由で HttpContext.Current.Server が null です。これがどこで発生するかを突き止めました。ユーザー コントロールとビジネス ロジック クラスでエラーが発生したときです。ここで何か不足していますか?

ありがとう

4

2 に答える 2

2

Application_Error ブロックは、アプリケーションのライフ サイクル間でいつでも例外をキャッチできます。

単一のアプリケーション内に多くのセッションが存在する可能性があることを理解できるように、アプリケーションのライフサイクルはセッションのライフサイクルの親です。

したがって、セッションを作成する前またはセッションの有効期限が切れた後に発生した特定のエラーで HttpContext.Current null が発生する場合があります。

セッション固有のエラー リダイレクトを作成する場合は、常に現在の HttpContext の Null をチェックする必要があります。

Server.GetLastError を使用して、発生したエラーの詳細を確認し、web.config の CustomError タグを介してエラー ページのリダイレクトを書き込むこともできます。

次のリンクを参照してください

http://weblogs.asp.net/scottgu/archive/2006/08/12/Tip_2F00_Trick_3A00_-Show-Detailed-Error-Messages-to-Developers.aspx

于 2012-04-08T15:58:05.610 に答える
1

アプリケーション エラーは、接続が存在しない場合を含め、いつでも発生する可能性があります。

たとえば、バックグラウンド スレッドが処理中で、例外が発生した場合などです。

于 2012-04-08T12:05:36.347 に答える