【发布时间】:2011-09-04 14:46:05
【问题描述】:
我正在尝试在股票示例 ASP.NET MVC3 网站中创建 2 个自定义错误页面。
Darin Dimitrov has a good SO answer here 但它不适用于我的所有测试条件。
然后是广受欢迎的How can I properly handle 404s in ASP.NET MVC? 帖子.. 但这只是涉及 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 模板时,其中一些非常长的路线(上图)现在给出了非常奇怪的错误页面
【问题讨论】:
-
Pure.Krome,你基本上关心 500 错误吗?在您的第二个链接中,Cottsak 的帖子按预期处理了上述所有 404 场景。
-
这是一个很好的解决方案.. 但正如我所问的 - 404 和 500 呢?这些东西应该被支持到框架中并且是第一个教程之一,我会想到的。静态页面,IMO,还不够好 :( 当然它可能会有一个相当失败的哀号,但有时我们需要更多的逻辑。
-
你看过我的回答 Pure.Krome 了吗?它允许您将特定的错误代码重定向到任何路线。如果您想“正确”,您甚至可以在操作中设置状态码
-
Pure.Krome,我一直在考虑这个问题,继承自 HandleErrorAttribute 的自定义属性是否可以满足您的要求?见stackoverflow.com/questions/5742141/…。它的要点是您实现自己的 HandleError 版本,它允许您实现自己的模型而不是基本的 System.Web.Mvc.HandleErrorInfo 模型。您可以设置任何您想要的数据,以便将信息传递给 500 视图。
-
@Khepri - 如果您想为 HandleError 使用内置的东西(即扩展模型),那将非常有用。这是一个很大的问题......我仍然坚持对所有这些场景进行一些基本的 404 和 500 错误处理......更不用说自定义视图了。
标签: c# .net asp.net-mvc error-handling