Global.asax の Application_Error メソッドで、セッション状態から値を取得しようとしています。
例外をスローする限り、セッション状態にアクセスできます。例えば:
thow new Exception("Test exception");
ただし、未処理の例外である場合、セッション状態にアクセスしようとすると、「このコンテキストではセッション状態を使用できません。」というエラーが表示されます。
動作の違いはなぜですか?回避策はありますか?
ありがとう。
Global.asax の Application_Error メソッドで、セッション状態から値を取得しようとしています。
例外をスローする限り、セッション状態にアクセスできます。例えば:
thow new Exception("Test exception");
ただし、未処理の例外である場合、セッション状態にアクセスしようとすると、「このコンテキストではセッション状態を使用できません。」というエラーが表示されます。
動作の違いはなぜですか?回避策はありますか?
ありがとう。
私は時々ASP.NETが嫌いです...
したがって、次を使用してエラーを生成します。
Response.Redirect("thispagedoesnotexist.aspx", false);
上記の行は、セッション状態が利用できない Application_Error にリダイレクトします
でも
throw new Exception("test");
上記の行は、セッション状態 AVAILABLE で Application_Error にリダイレクトします
したがって、これをすべて Application_Error で行うのではなく、コード全体で try/catch を使用してエラーをキャッチする必要があります。次に、セッション、ログ、および電子メール エラーの詳細からデータを収集し、最後にわかりやすいエラー ページにリダイレクトします。余分なコードがたくさん..
結論: Application_Error は価値がありません。
HttpContext.Current.Session を介してセッションにアクセスしようとしていると思います。動作の違いは、未処理の例外ハンドラーで、リクエストが「フェイルセーフ」モードになり、ページのライフサイクル (セッションの読み込みと破棄を含む) が終了したことだと思います。
詳細については、ライフサイクルに関するこのページをご覧ください