Application_Error - GetLastError()或GetLastError()。GetBaseException()

时间:2013-02-26 09:27:55

标签: asp.net error-handling

在处理Application_Error中的错误时,我应该使用哪两个?

我发现两者都有多个例子,但是如果一个比另一个好,那就不太清楚了。是否只有一个会显示正确的错误?

另外,我怀疑这很重要,但应用程序正在使用MVC 4。

1 个答案:

答案 0 :(得分:6)

这取决于你究竟需要什么。

来自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);
}

然后GetLastError会给你FooBarException,而GetLastError().GetBaseException()会给你FooException。所以前者返回实际未处理的异常,而后者返回根本原因。

我假设Foo,Bar和FooBar异常类不会覆盖GetLastErrorInnerException