C# 如何使用股票标准ASP.NET MVC3网站定制404和500错误页面?
我试图在一个股票样本ASP.NETMVC3网站中有2个自定义错误页面 但它不适用于我所有的测试条件 还有一个广受欢迎的帖子。。但这只涉及404错误 有人能解释一下吗C# 如何使用股票标准ASP.NET MVC3网站定制404和500错误页面?,c#,.net,asp.net-mvc,error-handling,C#,.net,Asp.net Mvc,Error Handling,我试图在一个股票样本ASP.NETMVC3网站中有2个自定义错误页面 但它不适用于我所有的测试条件 还有一个广受欢迎的帖子。。但这只涉及404错误 有人能解释一下吗 路线 web.config设置 控制器/动作方法 我们需要做一件非常简单的事情:( 接受此答案的场景: VS2010->文件->新建->ASP.NET MVC3项目/互联网应用程序 (右键单击解决方案)->使用IIS Express 错误页面不能是静态html页面。它们必须是我可以向其传递信息的页面,就像任何其他视图一样(例如
- 路线
设置web.config
- 控制器/动作方法
- VS2010->文件->新建->ASP.NET MVC3项目/互联网应用程序
- (右键单击解决方案)->使用IIS Express
- 错误页面不能是静态html页面。它们必须是我可以向其传递信息的页面,就像任何其他视图一样(例如
)ErrorController
->显示索引页/Home/Index
->显示索引页/Home
->显示索引页/
->显示关于页面/Home/About
->404/asdasd/asdsad/asdas/asddasd/adsad
->404/adsa/asda/asd/asd/asd/asd
->404/asdsadasda
HomeController.cs
类中
public ActionResult ThrowException()
{
throw new NotImplementedException();
}
现在
->500错误/home/throweexception
顺便说一句,在使用股票标准
新ASP.NET MVC3
模板时,一些很长的路由(上面)现在给出了非常奇怪的错误页面,您可以在web.config中设置错误页面信息。本页介绍如何执行此操作,以及如何在控制器上使用HandleErrorAttribute集,以便它们使用此配置
这似乎是个大问题 请看我的答案是: 但我会将这些路径添加到您的测试用例中: 及
我在我的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
/// 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);
}
}
这允许我有许多不同的自定义错误页面。这可能不是最好或最优雅的解决方案,但它确实对我有效。Pure.Krome,您基本上关心500错误吗?在您的第二个链接中,Cottsak的帖子如所希望的那样处理了上述所有404场景。这是一个非常好的解决方案。。但正如我所问的,404和500呢?我认为,这些东西应该被支持到框架中,并成为首批教程之一。静态页面,IMO,不够好:(当然,它可能会有一个相当失败的哀号,但有时我们需要一点逻辑。你看过我的答案Pure.Krome吗?它允许你将特定的错误代码重定向到任何路由。如果你想“正确”,你甚至可以在操作中设置状态代码Pure.Krome,我一直在考虑这个问题,从HandleErrorAttribute继承的自定义属性是否能满足您的需求?请参阅。其要点是您实现自己版本的HandleError,它允许您实现自己的模型,而不是基本System.Web.Mvc.HandleErrorInfo模型。您可以设置所需的任何数据anted允许您将信息传递到500视图。@Khepri-如果您想将内置的东西用于HandleError(即扩展模型),这将非常有用.这是一个很大的问题…我仍然在为所有这些场景获取一些基本的404和500错误处理。更不用说自定义视图了。有一个问题-你用404页面的url替换初始查询,这对用户来说肯定是不好的。我试着实现了这一点,但错误400失败了,有什么想法吗?我只是简单地得到了答案标准错误页面,而不是我在
中指定的页面。我可能错了,如果我错了,请有人纠正我,但我不认为400个错误是可定制的?快速问题,你为什么不将该路由放在App_Start>RouteConfig.cs文件中?@Termato,你现在是在2014年,但当时路由是在global.asax文件中。