我正在开发一个MVC3基本网站,并且正在寻找一种解决方案,用于处理错误并为每种错误呈现自定义视图。因此,假设我有一个“错误”控制器,其主要动作是“索引”(通用错误页面),并且该控制器将针对用户可能会出现的错误(例如“ Handle500”或“ HandleActionNotFound”)执行更多操作。
因此,此“错误”控制器可以处理网站上可能发生的每个错误(例如:找不到“控制器”或“操作”,500、404,dbException等)。
我正在使用Sitemap文件定义网站路径(而不是路线)。
该问题已经回答,这是对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");
}
}
}