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

在asp.net mvc(默认项目)中,将其放在类的顶部

[HandleError]

所以我在读一些博客,那个人说

“……告诉框架,如果您的 Controller 中发生未处理的异常,而不是显示默认的死亡黄屏,它应该提供一个称为错误的 View 。”

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

那么这是否意味着我不应该捕获任何错误(即不 try catch )?

然后我在看书,他们有

[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()]?一种用于 Action 方法,一种用于类方法吗?我假设HandleError在类的顶部会像HandleError(typeof(Exception))吗?

最后还有一个叫做IExceptionFilter的东西。因此,如果您想记录所有异常或有一些特殊的异常想要与众不同的方式使用,请使用它吗?

就像我只是想记录所有异常一样,无论我将这些异常做成哪一个,就是这样,但是如果我想在NullReferenceexception上做一些特别的事情,我会再做一个吗?

我正在观看本教程http://dimecasts.net/Casts/CastDetails/37,但没有看到他们在谈论的“ActionFilterAttribute”。这是旧版本的东西吗?

显然,它有4种方法可供使用,而您必须覆盖它们。在我的书中,只讨论以下内容:
  • IAuthorizationFilter
  • IActionFilter
  • IResultFilter
  • IExceptionFilter

  • 而且它们都是接口(interface),所以没有覆盖。尽管它们都不具有4种方法。只有一个或两个。

    谢谢

    哦,还有一件事。您是否应该始终为每个异常进行测试?就像我的一种方法可以遇到7种不同的异常一样。我应该测试所有7个异常(即抛出它们),然后最终捕获它们并处理它们(我通常只打印一些消息)。

    如果是这样,VS2008会发现可能发生的异常。我发现有时很难说出什么会引发异常,然后我必须找出哪些异常。

    最佳答案

    “从不”陷阱System.Exception。您可能隐藏了一个问题。最好是“快速失败”。

    仅捕获以下异常:

  • 你知道会发生和
  • 您可以从
  • 轻松恢复
  • 您无法抢先检查

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

    IMO建议使用Andrew的建议使用ELMAH记录未处理的异常或与此相关的任何异常。

    关于asp.net-mvc - 我需要有关HandleError的更多信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1074116/

    10-11 16:41