Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3句柄错误不适用于ASP.NET MVC3 EmptyTemplate项目_Asp.net Mvc 3_Error Handling - Fatal编程技术网

Asp.net mvc 3 MVC3句柄错误不适用于ASP.NET MVC3 EmptyTemplate项目

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添加了一个简单视图: @

在Visual Studio 2012中,我使用空模板创建了一个新的ASP.NET MVC3项目。然后,我创建了一个
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());
    }