10

他の場所で提案され ているように、カスタムエラー構成でredirectMode = ResponseRewriteを使用しているため、カスタムエラーページで例外情報にアクセスできます。これはしばらくの間魅力のように機能してきました。

「ユーザーがエラーから回復するのを助ける」タイプの機能をさらに追加するには、以前にSessionに保存された情報が必要です。これを実装すると、redirectMode = ResponseRewriteの場合、Sessionへのさまざまなアベニューがnullで終了することがわかりましたが、redirectMode = ResponseRedirectの場合(または定義されていない場合)はすべて入力されます。

誰もが理由を知っていますか?例外情報(ResponseRewrite)を使用するか、Session(ResponseRedirect)を使用するかを選択する必要があるのは奇妙に思えます。

リッチカスタムエラー処理に関するMSDNの記事によると、Sessionは、コントロールの受け渡しメソッドがServer.Transferである場合にのみ使用できます。これは、ResponseRewriteが内部で使用されていると想定したものです。明らかにそうではありません。

4

1 に答える 1

5

質問に対する答えはまだわかりませんが、それを乗り越えるために、Web構成からredirectMode属性を取り出し、Global.asaxApplication_Errorハンドラーにカスタムロジックを配置して、必要な処理を実行しました。例外を「ユーザーフレンドリー」なメッセージ例外に置き換えていますが、基本的に転送ロジックは次のとおりです。

if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}

次に、Error.aspxページにPage_Loadコードがあり、エラーをコンテキストから外してメッセージを表示します。

于 2009-11-09T14:43:22.023 に答える