Application_Error - 获取GetLastError()或GetLastError().GetBaseException()

7
处理 Application_Error 中的错误时,我应该使用哪一个?
我找到了多个示例,但不清楚哪一个更好。是否存在只有一个可以显示正确错误的情况?
此外,我怀疑这并不重要,但应用程序正在使用 MVC 4。
1个回答

7

这取决于你需要什么。

Exception.GetBaseException的文档中可以了解到:

在派生类中重写时,返回一个异常,该异常是一个或多个后续异常的根本原因。

Application_Error处理上层的异常,可能经过多个异常处理机制,所以如果出现以下异常:

try {
   //Lots of code, method calls, etc...
   try {
       throw new FooException("Foo");
   } catch(FooException fe) {
       throw new BarException("Bar", fe);
   }
}catch(BarException be) {
    throw new FooBarException("FooBar", be);
}

如果出现异常 FooBarException,则使用GetLastError方法将返回该异常,而使用GetLastError().GetBaseException()方法将返回根本原因FooException。因此,前者返回实际未处理的异常,而后者返回根本原因。假设Foo、Bar和FooBar异常类没有覆盖GetLastErrorInnerException方法。

很好的解释。我想要未处理的异常,所以就用 GetLastError() 了。 - user247702

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接