如何使用标准的ASP.NET MVC3网站创建自定义404和500错误页面?

问题描述

| 我试图在一个股票示例ASP.NET MVC3网站中创建2个自定义错误页面。 达林·迪米特洛夫(Darin Dimitrov)在这里一个很好的SO答案,但是它不能满足我所有的测试条件。 然后是广泛流行的如何在ASP.NET MVC中正确处理404?发布..但这仅涉及404错误。 有人可以解释一下吗 路线
web.config
设置 控制器/动作方法要做这个非常简单的事情:( 方案接受此答案: VS2010->文件->新建-> ASP.NET MVC3项目/ Internet应用程序 (右键单击解决方案。)->使用IIS Express 错误页面不能是静态的html页面。它们必须是我可以向其传递信息的页面,例如任何其他视图等(例如
ErrorController
)... 对于测试路线...
/Home/Index
->显示索引页
/Home
->显示索引页
/
->显示索引页
/Home/About
->显示关于页面
/asdasd/asdsad/asdas/asddasd/adsad
-> 404
/adsa/asda/asd/asd/asd/asd
-> 404
/asdsadasda
-> 404 然后将其添加到“ 9”类中。
public ActionResult ThrowException()
{
    throw new NotImplementedException();
}
现在 ..
/home/throwexception
-> 500错误 干杯:) 顺便说一句,当使用股票标准
new ASP.NET MVC3
模板时,其中一些真正的长途路线(以上)现在给出了非常奇怪的错误页面     

解决方法

        我在我的web.config文件中指定customErrors,如下所示;
    <customErrors defaultRedirect=\"/Error/GeneralError\" mode=\"On\">
      <error statusCode=\"403\" redirect=\"/Error/403\" />
      <error statusCode=\"404\" redirect=\"/Error/404\" />
      <error statusCode=\"500\" redirect=\"/Error/500\" />
    </customErrors
我在Global.asax中有一条路线,如下所示;
            /// Error Pages
            /// 
            routes.MapRoute(
                \"Error\",// Route name
                \"Error/{errorCode}\",// URL with parameters
                new { controller = \"Page\",action = \"Error\",errorCode= UrlParameter.Optional }
            );
相应的ActionResult执行以下操作,该操作返回相关的自定义错误页面。
//
        public ActionResult Error(string errorCode)
        {
            var viewModel = new PageViewModel();

            int code = 0;
            int.TryParse(errorCode,out code);

            switch (code)
            {
                case 403:
                    viewModel.HtmlTitleTag = GlobalFunctions.FormatTitleTag(\"403 Forbidden\");
                    return View(\"403\",viewModel);
                case 404:
                    viewModel.HtmlTitleTag = GlobalFunctions.FormatTitleTag(\"404 Page Not Found\");
                    return View(\"404\",viewModel);
                case 500:
                     viewModel.HtmlTitleTag = GlobalFunctions.FormatTitleTag(\"500 Internal Server Error\");
                    return View(\"500\",viewModel);
                default:
                    viewModel.HtmlTitleTag = GlobalFunctions.FormatTitleTag(\"Embarrassing Error\");
                    return View(\"GeneralError\",viewModel);
            }
        }
这使我可以拥有许多不同的自定义错误页面。它可能不是最佳或最优雅的解决方案,但它肯定对我有用。     ,        您可以在web.config中设置错误页面信息。本页讨论了如何执行此操作以及如何在控制器上使用HandleErrorAttribute设置,以便他们使用此配置。 http://deanhume.com/Home/BlogPost/custom-error-pages-in-mvc/4     ,        这似乎是一个大问题。 看到我的答案是这篇文章: 一劳永逸的是,在MVC中处理错误,异常和404的最佳路由方法是什么 但我会将这些路由添加到您的测试用例: http://www.website.com/yourcontroller/youraction:32 和 http://www.website.com/yourcontroller/youraction/http:/www.website.com/yourcontroller/youraction?par=123