Asp.net mvc 3 MVC3句柄错误不适用于ASP.NET MVC3 EmptyTemplate项目
在Visual Studio 2012中,我使用空模板创建了一个新的ASP.NET MVC3项目。然后,我创建了一个Asp.net mvc 3 MVC3句柄错误不适用于ASP.NET MVC3 EmptyTemplate项目,asp.net-mvc-3,error-handling,Asp.net Mvc 3,Error Handling,在Visual Studio 2012中,我使用空模板创建了一个新的ASP.NET MVC3项目。然后,我创建了一个HomeController,其中包含以下ActionResult: public ActionResult Index() { throw new Exception("oops!"); ViewBag.Message = "hello world"; return View(); } 接下来,我为我的HomeController添加了一个简单视图: @
HomeController
,其中包含以下ActionResult
:
public ActionResult Index()
{
throw new Exception("oops!");
ViewBag.Message = "hello world";
return View();
}
接下来,我为我的HomeController添加了一个简单视图:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
当我运行项目时,我得到:
500内部服务器错误。网站无法显示该页面
然后我决定使用Internet模板创建另一个ASP.NET MVC3项目。在HomeController
中,我抛出了一个异常
,就像我在上面做的一样,我在Web.config中再次打开了customErrors
。当我运行项目时,我得到了正确的结果:
很抱歉,处理您的请求时出错
在这两个项目之间,我会错过什么
我已经逐行浏览了Web.config,没有发现任何差异。两个项目都未触及Global.asax文件。您需要将HandleErrorAttribute注册为全局筛选器 在Global.asax中,在应用程序启动事件中注册过滤器:
protected void Application_Start()
{
...
RegisterGlobalFilters(GlobalFilters.Filters);
....
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
您还可以将筛选器直接应用于控制器或操作。过滤器所做的,在出现异常的情况下,它会在filterContext上设置结果以指向您的错误视图。我简直不敢相信 多亏了Cosmin One,下面的一条评论让我继承了
HandleErrorAttribute
,OneException
被解雇了。在做了那个改动之后,我在Chrome上运行了这个程序并测试了我的页面,在那里我看到了一直在那里的适当信息
尽管我仍然不明白为什么一个应用程序在IE中运行得很好,而另一个应用程序运行得不好。这是在创建项目时添加的:(您是在IIS或IIS Express中运行的。我无法重现问题,我总是得到正确的结果(错误视图)嗯。这两个项目最初都在IIS Express中运行,但我在IIS中测试了它们,结果相同。创建一个从HandleError筛选器继承的项目,覆盖所有方法,并在调试器中查看是否调用了任何方法。
@model System.Web.Mvc.HandleErrorInfo
@{
//Layout = null;
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
protected void Application_Start()
{
...
RegisterGlobalFilters(GlobalFilters.Filters);
....
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}