如何使用库存标准ASP.NET MVC3网站获得自定义404和500错误页面?

Pur*_*ome 9 .net c# error-handling asp.net-mvc

我试图在一个库存样本ASP.NET MVC3网站上有2个自定义错误页面.

Darin Dimitrov在这里有一个很好的答案,但它并不适合我所有的测试条件.

然后广泛流行如何在ASP.NET MVC中正确处理404?发布..但这只是触及404错误.

有人可以解释一下

  • 路线
  • web.config 设置
  • 控制器/动作方法

要做这个非常简单的事情:(

接受这个答案的场景:

  • VS2010 - >文件 - >新建 - > ASP.NET MVC3项目/ Internet应用程序
  • (右键单击解决方案).. - >使用IIS Express
  • 错误页面不能是静态html页面.它们必须是一个我可以传递信息的页面,就像任何其他视图一样,等等(例如,a ErrorController)......

并为测试路线......

  • /Home/Index - >显示索引页面
  • /Home - >显示索引页面
  • / - >显示索引页面
  • /Home/About - >显示关于页面
  • /asdasd/asdsad/asdas/asddasd/adsad - > 404
  • /adsa/asda/asd/asd/asd/asd - > 404
  • /asdsadasda - > 404

然后将其添加到HomeController.cs班级..

public ActionResult ThrowException()
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

现在 ..

  • /home/throwexception - > 500错误

干杯:)

顺便说一下,当使用股票标准new ASP.NET MVC3模板时,其中一些真正的长路线(上图)现在给出了非常奇怪的错误页面

mac*_*cou 6

我在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
Run Code Online (Sandbox Code Playgroud)

我在Global.asax中有一条路线如下;

            /// Error Pages
            /// 
            routes.MapRoute(
                "Error", // Route name
                "Error/{errorCode}", // URL with parameters
                new { controller = "Page", action = "Error", errorCode= UrlParameter.Optional }
            );
Run Code Online (Sandbox Code Playgroud)

相应的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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

这允许我有许多不同的自定义错误页面.它可能不是最好或最优雅的解决方案,但它肯定适合我.


Sli*_*k86 0

您可以在 web.config 中设置错误页面信息。本页讨论如何执行此操作并使用控制器上设置的 HandleErrorAttribute 以便它们使用此配置。

http://deanhume.com/Home/BlogPost/custom-error-pages-in-mvc/4