global.asaxApplication_Error
メッセージにカスタムエラーハンドラーがあり、ビュー、コントローラーなどのエラーを含む、未処理のすべての例外を処理します。
これにより、適切なエラーページを表示するために必要なパラメータを提供する適切なエラーコントローラが呼び出されます。
ただし、エラーコントローラが例外をスローすると、これは失敗し、それを処理する方法についての決定が残ります(これは通常、サイトレイアウトに破損エラーが発生した場合に発生します)。
現在のアイデアは、エラーの原因を表示する標準のYSOD asp.netページを表示することです(おそらく後で、フェイルセーフのhtmlのみのエラーページに切り替えますが、デバッグの目的で、今はYSODが必要です)。
それで、エラー処理が失敗した場合にそのページを戻す方法はありますか?
ノート:
- 呼び出しています
Server.ClearError()
。YOSDページが表示されない場合は、最初のエラーが発生し、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);
}