Response.End导致System.Threading.ThreadAbortException

时间:2015-11-11 13:13:48

标签: c# asp.net response epplus

我在button_Click()方法中尝试了一下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(),我明白了。

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

任何人都知道那里出了什么问题?

2 个答案:

答案 0 :(得分:3)

抓住ThreadAbortException,什么都不做。您可以放心地忽略此异常。

编辑: 删除日志,或添加一个检查以不登录ThreadAbortException

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

答案 1 :(得分:1)

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

您可以捕获并吸收此TreadAbortException。

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