抛出新的异常没有被Server.GetLastError()捕获

use*_*989 2 c# asp.net

在我的控制器操作中,我正在捕获异常并在冒泡到Application_Error()方法之前添加一些额外的信息

ActionResult Index()
{
    try
    {
        var i = 1 / 0;
    }
    catch(Exception e)
    {
        throw new Exception("My new Exception!", e)
    }
}


private void Application_Error(object sender, EventArgs e)
{
    // Breakpoint shows original error! Not my newly thrown one!
    var exception = Server.GetLastError().GetBaseException();
}
Run Code Online (Sandbox Code Playgroud)

spe*_*der 5

快速浏览Exception.GetBaseException方法的文档可以清除所有内容:

一系列异常由一组异常组成,例如链中的每个异常都是作为其InnerException属性中引用的异常的直接结果而抛出的.对于给定的链,可能只有一个例外是链中所有其他异常的根本原因.此异常称为基本异常,其InnerException属性始终包含空引用.

您将原始设置ExceptionInnerException抛出Exception的原始,因此原始Exception "基本异常".

也许你不应该打电话,GetBaseException如果你想看到Exception链中最新的?