关于asp.net mvc:我需要有关HandleError的更多信息

I need More information on HandleError

我不确定HandleError的不同方法之间有什么区别。

在asp.net mvc(默认项目)中,他们把它放在了类的顶层

[的HandleError]

所以我正在阅读一些博客,而这个人就这么说了

"....告诉框架,如果你的控制器发生了未处理的异常,而不是显示默认的黄色死亡屏幕,它应该提供一个名为Error的视图。"

http://blog.dantup.me.uk/2009/04/aspnet-mvc-handleerror-attribute-custom.html

那么这是否意味着我不应该捕捉任何错误(即没有尝试捕获)?

然后,我正在看书,他们有

1
2
3
4
5
6
7
[HandleError(ExceptionType=typeof(InsufficientMemoryException),View="About")]
public ActionResult HandleError()
{
    throw new
InsufficientMemoryException();
    return View("Home");
}

所以他们只是把它放在这个ActionResult之上并给它一个异常类型。我的第一个问题是,如果你有一个以上的错误,你会发生什么?我还以为你应该处理所有错误。我知道这只是一个小例子,但你不应该在某处捕获MemoryException或者如果你这样做会搞砸"HandleError"吗?

我也注意到在VS中看到HandleError有2个重载方法。其中一个是上面的,另一个是HandError()。

那么为什么在asp.net MVC示例文件中只有[HandleError]而不是[HandleError()]?一个用于行动方法,一个用于课堂方法?我假设在类1的顶部HandleError会像HandleError(typeof(Exception))?

最后有一种叫做IExceptionFilter的东西。因此,如果要记录所有异常,或者如果您有一些特殊的例外情况,您希望以不同的方式执行某些操作,那么您可以使用它吗?

就像我只是想记录所有异常一样,无论我只是做出其中??的一个,那就是它,但是如果我想在NullReferenceexception做一些特别的事情,我会再做另一个吗?

我正在看这个教程http://dimecasts.net/Casts/CastDetails/37,我没有看到他们正在谈论的这个"ActionFilterAttribute"。这是旧版本还是其他什么?

就像显然它有4种方法可以使用,你必须覆盖它们。在我的书中,它只谈到这些:

  • 个IAuthorizationFilter
  • IActionFilter
  • IResultFilter
  • 个IExceptionFilter
  • 它们都是接口所以没有覆盖。不是他们虽然有4种方法。只有一个或两个。

    谢谢

    哦,还有一件事。你应该总是测试每一个例外吗?像我的一个方法可以遇到7个不同的例外。我应该测试所有7个异常(即抛出它们)然后最终捕获它们并处理它们(我通常只打印一些消息)。

    如果是这样的话,VS2008会找到可能发生异常的东西。我发现很难说有什么可以抛出异常,然后我必须追捕哪些。


    "从不"捕获System.Exception。你可能隐藏了一个问题。更好地"快速失败"。

    只捕获以下异常:

    • 你知道可以发生和
    • 你可以优雅地从和恢复
    • 那你不能先发制人地检查

    因此,要回答最后一组问题,如果您可以检查代码中的条件,我就不会捕获这些异常。例如,如果FileNotFound是其中之一,而不是陷阱FileNotFoundException,请检查文件。如果NullReference为1,请检查对象是否为null而不是捕获异常。

    安德鲁建议使用ELMAH来记录未处理的异常,或任何例外,这是一个很好的,IMO。


    首先要注意的是,您应该始终捕获可能发生的错误。接下来,你不应该试图捕获人类已知的每一个错误......你可能整天都在你的代码中添加这些东西。 [HandleError]属性本质上是一个全局错误处理程序,它表示如果在此控制器中发生任何错误,则将它们发送到已配置的页面。这是很好的开箱即用,你很好地处理所有错误!接下来就是以某种方式处理特定错误。您可以说是否发生XYZ错误转到此页面而不是全局处理的错误页面。如果发生多个错误......第一个错误。这意味着如果您计划捕获两种类型的错误...首先出现的错误将控制您重定向的页面。

    您可以考虑的任何asp.net站点(webforms或mvc)的下一件事是ELMAH框架。它将记录并捕获您的站点导致的每个错误。这将帮助您解决您不知道的任何错误......这样您就不必预先计划好所有错误。这个框架的好处是你可以让它在发生错误时向你发送一封电子邮件,并将其记录到xml文件中(以及其他配置可能性)。非常便利!

    希望我能解决您的所有问题!