【发布时间】:2011-07-10 18:04:02
【问题描述】:
我正在开发一个 MVC3 基础网站,我正在寻找一种解决方案来处理错误并为每种错误呈现自定义视图。所以想象一下我有一个“错误”控制器,他的主要操作是“索引”(通用错误页面),这个控制器将对用户可能出现的错误有几个操作,比如“Handle500”或“HandleActionNotFound”。
因此网站上可能发生的每一个错误都可能由这个“错误”控制器处理(例如:“控制器”或“操作”未找到、500、404、dbException 等)。
我正在使用站点地图文件来定义网站路径(而不是路线)。
这个问题已经回答了,这是对 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");
}
}
}
【问题讨论】:
-
web.config 中的设置应该支持什么?大概你不会包含任何 httperrors 设置?
-
forums.asp.net/p/1782402/4894514.aspx/… 有一些不错的提示,例如 IE 不会显示小于 512 字节的错误页面
标签: asp.net-mvc-3 error-handling