私は自分でこの問題に遭遇したばかりで、数時間いじり回した後、なんとか解決しました。問題は、Application_Error()
停止する必要があるある種の「クリーンアップ」ルーチンの一部として実行した後にセッションをクリアすることです。
私が見つけた解決策は次のとおりです。
呼び出しServer.ClearError();
- アプリケーションから最後のエラーをクリアし、「クリーンアップ」の実行を停止して、セッションを維持します。
これの(望ましくない)副作用は、エラーページへの自動リダイレクトを実行しなくなることです。そのため、明示的に呼び出す必要がありますResponse.Redirect("~/error.aspx");
したがって、次のようなものです。
protected void Application_Error(object sender, EventArgs e)
{
// Grab the last exception
Exception ex = Server.GetLastError();
// put it in session
Session["Last_Exception"] = ex;
// clear the last error to stop .net clearing session
Server.ClearError();
// The above stops the auto-redirect - so do a redirect!
Response.Redirect("~/error.aspx");
}
URL をハードコーディングしたくない場合は、 のセクションdefaultRedirect
から URL を直接取得できます。これにより、次のようになります。customerrors
web.config
protected void Application_Error(object sender, EventArgs e)
{
// Grab the last exception
Exception ex = Server.GetLastError();
// put it in session
Session["Last_Exception"] = ex;
// clear the last error to stop .net clearing session
Server.ClearError();
// The above stops the auto-redirect - so do a redirect using the default redirect from the customErrors section of the web.config!
var customerrors = (CustomErrorsSection)WebConfigurationManager.OpenWebConfiguration("/").GetSection("system.web/customErrors");
Response.Redirect(customerrors.DefaultRedirect);
}