gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:18:13 28 4
gpt4 key购买 nike

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

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

[处理错误]

所以我正在读一些博客,这个人这样说

“......告诉框架,如果 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()]?一种用于操作方法,另一种用于类方法?我假设类顶部的 HandleError 类似于 HandleError(typeof(Exception))?

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

就像,如果我只是想记录所有异常,无论什么情况,我都会只制作其中之一,仅此而已,但如果我想在 NullReferenceException 上做一些特殊的事情,我会制作另一个吗?

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

显然它有 4 个可以使用的方法,但你必须重写它们。在我的书中只讨论了这些:

  1. IAuthorizationFilter
  2. IActionFilter
  3. IResultFilter
  4. IExceptionFilter

它们都是接口(interface),所以没有覆盖。但他们都没有 4 种方法。只有一两个。

谢谢

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

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

最佳答案

“从不”捕获 System.Exception。你可能隐藏了一个问题。最好“快速失败”。

仅捕获以下异常:

  • 您知道可能会发生并且
  • 您可以从容地恢复
  • 您无法预先检查

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

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com