问题描述
|
我试图在一个股票示例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