Response.End causing System.Threading.ThreadAbortException

本文关键字:Threading ThreadAbortException System causing End Response | 更新日期: 2023-09-27 18:21:27

我在button''uClick()方法中有一个try-catch,我使用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(),我得到的。

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

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

Response.End causing System.Threading.ThreadAbortException

只需捕获ThreadAbortException,什么也不做。您可以放心地忽略此异常。

编辑:删除日志,或添加不登录ThreadAbortException 的复选框

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

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

您可以捕获并吸收此TreadAbortException。

您也可以考虑添加一个finally块来结束响应,而不是在try中使用它。如果发现异常,可以修改响应并向客户端发回错误。