【发布时间】:2014-08-08 12:33:10
【问题描述】:
首先,我不会轻易发布此消息。我刚刚花了将近创纪录的半天时间试图解决这个问题。
我正在笔记本电脑上使用 Visual Studio 2012 开发一个 ASP.NET MVC 网站。我通过使用this approach将此代码添加到我的GLOBAL.ASAX文件中实现了错误处理:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Index");
routeData.Values.Add("exception", exception);
if (exception.GetType() == typeof(HttpException))
{
routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
}
else
{
routeData.Values.Add("statusCode", 500);
}
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
我有一个视图会在 Razor 标记中产生错误:
@{
// trigger an error
int i =1/0;
}
当我浏览到这个视图时,它触发了一个错误,将我带到控制器错误,操作索引,这里的代码显示了一个适当的视图:
public ActionResult Index(int statusCode, Exception exception){
Response.StatusCode = statusCode;
return View(); }
到目前为止,一切都很好。我的问题是 - 我怎样才能以同样的方式处理 404?因此,如果我转到一个不存在的页面,我会得到:
我尝试过的事情:
- CustomErrors 的每一种可能安排 - web.config 中的开/关
- 调试 global.asax 以检查它是否在应用程序启动时运行
- 还有很多其他的事情,我敢肯定,我现在已经忘记了!
Visual Studio 使用的 Web 服务器是 IIS 8 Express,如果有帮助的话。
【问题讨论】:
-
PS 这很可能是其他问题的重复,但在我看来,所提出的解决方案都没有。
-
如果您使用自定义错误,您是否删除了 filters.Add(new HandleErrorAttribute());来自 FilterConfig 类(如果你有的话)?这可能会导致自定义错误。