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

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

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

然后广泛流行如何在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

然后将其添加到HomeController.cs类中..

 public ActionResult ThrowException() { throw new NotImplementedException(); } 

现在 ..

  • /home/throwexception – > 500错误

干杯:)

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

我在web.config文件中指定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中的错误,exception和404的最佳路由方法

但我会将这些路由添加到您的测试用例中:

http://www.website.com/yourcontroller/youraction:32

http://www.website.com/yourcontroller/youraction/http:/www.website.com/yourcontroller/youraction?par=123