最佳答案
我正在开发一个 MVC3的基础网站,我正在寻找一个解决方案,处理错误和渲染自定义视图的每一种错误。所以假设我有一个“ Error”控制器,它的主要操作是“ Index”(通用错误页面) ,这个控制器对于可能出现在用户面前的错误(如“ Handle500”或“ HandleActionNotfound”)将有几个更多的操作。
因此,网站上可能发生的每个错误都可以由这个“ Error”控制器来处理(例如: “ Controller”或“ Action”not found,500,404,dbException 等)。
我使用 Sitemap 文件来定义网站路径(而不是路由)。
这个问题已经被回答了,这是对 Gweebz 的回答
我的最后一个 application _ 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");
}
}
}