Response.End 导致 System.Threading.ThreadAbortException

Response.End causing System.Threading.ThreadAbortException

我在 button_Click() 方法中尝试捕获,我使用 EPPlus 将一些数据保存到 Excel 电子表格。

try 
{
 .... Some calculations here...
   //Create Excel output.
                Response.Clear();
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment;  filename=Report " +
                                   DateTime.Today.Day.ToString() + "-" + DateTime.Today.Month.ToString() + "-" +
                                   DateTime.Today.Year.ToString() + " " + DateTime.Now.Hour + "-" +
                                   DateTime.Now.Minute + "-" + DateTime.Now.Second + ".xlsx");
                package.SaveAs(Response.OutputStream);
                Response.End();
}

cach()
{
   LogException();
}

我收到一个错误 System.Threading.ThreadAbortException,这是因为上面的 Response.End(),我收到了。

真正烦人的是,尽管在我的开发机器上它仍然输出文件,但是当我将网站放在服务器上时,它会记录错误,页面不断加载并且永远不会吐出文件。

有人知道那里出了什么问题吗?

只是抓住 ThreadAbortException 什么都不做。您可以安全地忽略此异常。

编辑: 把日志去掉,或者加勾不登录ThreadAbortException

catch(Exception ex){
    if (ex is System.Threading.ThreadAbortException)
    {
        //do nothing
        return;
    }else{
        LogException(ex);
    }
}

当Response.Redirect或Response.End在try块中时,执行catch块中的代码。

您可以捕获并吸收此 TreadAbortException。

您还可以考虑添加一个结束响应的 finally 块,而不是将其放在 try 中。如果您发现异常,您可以修改响应并将错误发送回客户端。