1

global.asaxApplication_Errorメッセージにカスタムエラーハンドラーがあり、ビュー、コントローラーなどのエラーを含む、未処理のすべての例外を処理します。

これにより、適切なエラーページを表示するために必要なパラメータを提供する適切なエラーコントローラが呼び出されます。

ただし、エラーコントローラが例外をスローすると、これは失敗し、それを処理する方法についての決定が残ります(これは通常、サイトレイアウトに破損エラーが発生した場合に発生します)。

現在のアイデアは、エラーの原因を表示する標準のYSOD asp.netページを表示することです(おそらく後で、フェイルセーフのhtmlのみのエラーページに切り替えますが、デバッグの目的で、今はYSODが必要です)。

それで、エラー処理が失敗した場合にそのページを戻す方法はありますか?

ノート:

  1. 呼び出していますServer.ClearError()。YOSDページが表示されない場合は、最初のエラーが発生し、2番目のエラーは発生しません。
  2. 例外自体は標準Response.Writeでキャプチャして画面に出力できますが、私はYOSDを介してそれをダンプすることを非常に好みます。

編集:コードサンプル。

protected void Application_Error(object sender, EventArgs e)
{
  var exception = Server.GetLastError();
  LogWriter.LogException(exception);
  HttpContext.Current.Server.ClearError();

  GenerateErrorInfo(Title, HtmlDescription, exception);            
  IController controller = new ErrorController();
  var routeData = new RouteData();
  routeData.Values.Add("controller", "Error");
  routeData.Values.Add("action", "Error");
  controller.Execute(new RequestContext(
        new HttpContextWrapper(HttpContext.Current), 
        routeData)); <<-- Exception can happen here.
}

public static void GenerateErrorInfo(string Title, string HtmlDescription, Exception exception)
{
  HttpContext.Current.Application.Add("errorTitle", Title);
  HttpContext.Current.Application.Add("errorDescription", description);
}
4

0 に答える 0