1

ASP.NET 4アプリケーションのカスタム エラー ページを作成しました。例外オブジェクトを入れましたHttpContext.current.Session["CustomError"]が、ユーザーがエラーページにリダイレクトされたときHttpContext.current.Session["CustomError"]nullです。私は次のように CustomError クラスのコンストラクターでそれを行います。

public CustomError(enExceptionType ExceptionType) : base(ExceptionMessage(ExceptionType)) { 
    HttpContext.Current.Session["CustomError"] = this; 
}

コードをステップ オーバーすると、Session["Error"] にエラー オブジェクトが含まれます。何か案が?

アップデート:

web.config からカスタム エラー ページを削除し、これを glabal.asax に追加しました。

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
    }
}

この関数をステップ実行すると、例外がスローされたときにこの関数が 2 回呼び出されることに気付きました。1 回目は Session["CustiomError"] にエラー オブジェクトが含まれていますが、2 回目は null です。

4

2 に答える 2

0

使用する代わりにResponse.redirect(URL)(私はあなたがあなたのコードに持っていると思います)

Server.Transfer(URL)

また

Response.redirect(url, false)

なぜServer.Transfer(url)ですか?

Server.Transferを使用して別のページに転送すると、サーバーリソースが節約されます。ブラウザにリダイレクトするように指示する代わりに、Webサーバーの「フォーカス」を変更してリクエストを転送するだけです。これは、通過するHTTPリクエストの数が少ないことを意味します。これにより、Webサーバーへの負荷が軽減され、アプリケーションの実行速度が向上します。

ソースはこちら

これらのいずれかがあなたのために働くかどうか私に知らせてください。

更新

Web構成設定を使用している場合、RedirectmodevarにResponseWrite値を追加してみてください。

<customErrors mode="RemoteOnly" defaultRedirect="~/errors/GeneralError.aspx" redirectMode="ResponseRewrite" />

これがまだ機能しない場合は、これを実装することをお勧めします(アプリケーションでエラーをログファイルに記録し(管理者として)、一般的なエラーをユーザーに提示します)。

于 2011-04-23T09:51:01.383 に答える
0

これで問題は解決しましたが、誰かが理由を教えてくれれば幸いです:)

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
        **Server.ClearError();**
    }
}
于 2011-04-23T20:58:43.520 に答える