MVC3ベースのWebサイトを開発していて、エラーを処理するためのソリューションと、エラーの種類ごとにカスタムビューをレンダリングする方法を探しています。そこで、「アクション」が「インデックス」(一般的なエラーページ)である「エラー」コントローラがあり、このコントローラが「Handle500」や「HandleActionNotFound」などのユーザーに表示される可能性のあるエラーに対するアクションをさらにいくつか持っているとします。
したがって、Webサイトで発生する可能性のあるすべてのエラーは、この「エラー」コントローラ(例:「コントローラ」または「アクション」が見つからない、500、404、dbExceptionなど)によって処理される可能性があります。
サイトマップファイルを使用して(ルーティングではなく)Webサイトパスを定義しています。
この質問はすでに回答されています。これはGweebzへの返信です
私の最後のapplicaiton_errorメソッドは次のとおりです。
protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false"))
{
Log.Logger.Error("unhandled exception: ", Server.GetLastError());
}
else
{
try
{
var exception = Server.GetLastError();
Log.Logger.Error("unhandled exception: ", exception);
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
catch (Exception e)
{
//if Error controller failed for same reason, we will display static HTML error page
Log.Logger.Fatal("failed to display error page, fallback to HTML error: ", e);
Response.TransmitFile("~/error.html");
}
}
}