Application_Error - GetLastError() or GetLastError

2019-05-03 08:32发布

When handling an error in Application_Error, which of those two should I use?

I'm finding multiple examples for both, but it's not really clear if one is better than the other. Are there cases where only one will show the correct error?

Also, I doubt this matters, but the application is using MVC 4.

1条回答
欢心
2楼-- · 2019-05-03 09:19

It depends on what exactly do you need.

From the documenation of Exception.GetBaseException:

When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

Application_Error handles exceptions on the upper level, maybe after several exception handling mechanisms, so if exception is thrown like this:

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

then GetLastError will get you FooBarException, while GetLastError().GetBaseException() will get you FooException. So the former returns actual unhandled exception while the latter returns the root cause.

I assume that Foo, Bar and FooBar exception classes do not override GetLastError or InnerException

查看更多
登录 后发表回答