Asp.net mvc 我需要更多关于HandleError的信息

Asp.net mvc 我需要更多关于HandleError的信息,asp.net-mvc,Asp.net Mvc,我不确定处理错误的不同方法之间有什么区别 在asp.NETMVC(默认项目)中,他们将此放在类的顶部 [手机错误] 所以我读了一些博客,那个人这么说 “…告诉框架,如果控制器中发生未经处理的异常,它应该提供一个名为Error的视图,而不是显示默认的死亡黄屏。” 那么这是否意味着我不应该捕捉任何错误(即不尝试捕捉) 我当时在看一本书,他们有 [HandleError(ExceptionType=typeof(InsufficientMemoryException),View="About")]

我不确定处理错误的不同方法之间有什么区别

在asp.NETMVC(默认项目)中,他们将此放在类的顶部

[手机错误]

所以我读了一些博客,那个人这么说

“…告诉框架,如果控制器中发生未经处理的异常,它应该提供一个名为Error的视图,而不是显示默认的死亡黄屏。”

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

我当时在看一本书,他们有

[HandleError(ExceptionType=typeof(InsufficientMemoryException),View="About")]
public ActionResult HandleError()
{
    throw new 
InsufficientMemoryException();
    return View("Home");
}
所以他们只是把它放在这个ActionResult之上,并给它一个异常类型。我的第一个问题是,如果你抛出了不止一个错误,会发生什么?我还认为你应该处理所有的错误。我知道这只是一个小例子,但你是否应该在某个地方发现MemoryException,或者如果你发现了,这会不会把“HandleError”搞砸

在VS中查看时,我还注意到HandleError有两种重载方法。其中一个是上面的,另一个是HandError()

那么,为什么asp.net MVC示例文件中只有[HandleError],而没有[HandleError()?一个用于动作方法,一个用于类方法?我假设类1顶部的HandleError类似于HandleError(typeof(Exception))

最后还有一个叫做IEExceptionFilter的东西。所以,如果您想记录所有异常,或者如果您有一些特殊的异常,您想做一些不同的事情,您可以使用它吗

比如说,如果我只想记录所有异常,不管发生什么,我都会做一个,就是这样,但是如果我想在NullReferenceexception上做一些特殊的事情,我会做另一个

我在看这个教程,我没有看到他们所说的“ActionFilterAttribute”。这是旧版本还是什么

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

  • IAuthorizationFilter
  • 离子过滤器
  • IResultFilter
  • IEExceptionFilter
  • 它们都是接口,所以没有覆盖。但其中没有一种方法有4种。只有一两个

    谢谢

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


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

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

    <> P> ASP.NET网站(WebFrase/MVC)可以考虑的另一个问题是ELMAH框架。它将记录并捕获站点导致的每一个错误。这将帮助您解决您不知道的任何错误…这样您就不必预先计划所有错误。这个框架的好处在于,当发生错误时,您可以让它向您发送电子邮件,并将其记录到xml文件中(以及其他可能的配置)。非常方便

    希望我解决了你所有的疑问

    “从不”陷阱系统。异常。你可能在隐瞒一个问题。最好是“快速失败”

    只有以下例外情况:

    • 你知道可能发生和
    • 你可以优雅地从中恢复过来
    • 你不能预先检查
    所以,为了回答您的最后一组问题,如果您可以检查代码中的条件,我不会捕获这些异常。例如,如果FileNotFound是其中之一,而不是trap FileNotFoundException,则检查该文件。如果NullReference为1,则检查对象是否为null,而不是捕获异常


    Andrew建议使用ELMAH来记录未处理的异常,或者任何与此相关的异常,这是一个很好的建议,我想。

    Hmm所以处理错误就是如果您想要一个通用页面来记录所有错误?如果您想要更具体的错误,那么您可以将其放在actionView上?“IEExceptionFilter”怎么样?我什么时候用这个?这会是我记录日志的地方吗(或Elmah代码)?而且我仍然不确定代码是什么样子的?我不处理错误(try/catch),还是仍然处理它们。我不清楚我是否会处理他们,如果这混淆了[HandleError]。而且,如果我处理它们,这不会阻止ELMAH框架对已处理的异常进行处理吗?Ie我需要手动记录已知的?