asp.net-mvc – ASP.NET MVC HandleError

我如何去讨论[HandleError]过滤器在asp.net MVC预览5?
我在我的Web.config文件中设置customErrors

<customErrors mode="On" defaultRedirect="Error.aspx">
  <error statusCode="403" redirect="NoAccess.htm"/>
  <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

并把[HandleError]上面我的控制器类如下:

[HandleError]
public class DSWebsiteController: Controller
{
    [snip]
    public ActionResult CrashTest()
    {
        throw new Exception("Oh Noes!");
    }
}

然后,我让我的控制器继承这个类,并调用CrashTest()。
Visual Studio停止错误,按f5继续后,我被重新路由到Error.aspx?aspxerrorpath = / sxi.mvc / CrashTest(其中sxi是使用的控制器的名称。
当然,路径找不到,我得到“服务器错误在’/’应用程序。 404。

此网站已从预览3移植到5。
一切运行(不是那么多工作到端口),除了错误处理。
当我创建一个完整的新项目的错误处理似乎工作。

想法?

– 注意 –
由于这个问题有超过3K的意见,现在,我认为这将是有益的放在我目前(ASP.NET MVC 1.0)使用。
mvc contrib project有一个辉煌属性称为“RescueAttribute”
你应该检查一下吧;)

最佳答案
[HandleError]

当你只提供HandleError属性到你的类(或你的action方法),那么当一个未处理的异常发生时,MVC将首先在Controller的View文件夹中寻找一个名为“Error”的对应视图。如果它找不到它,那么它将继续查找共享视图文件夹(其中应该有一个Error.aspx文件在默认情况下)

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]

您还可以使用有关您正在查找的异常类型的特定信息来堆叠其他属性。此时,您可以将错误定向到除默认“错误”视图之外的特定视图。

有关更多信息,请参阅Scott Guthrie’s blog post

转载注明原文:asp.net-mvc – ASP.NET MVC HandleError - 代码日志