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 中。如果您发现异常,您可以修改响应并将错误发送回客户端。
我在 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 中。如果您发现异常,您可以修改响应并将错误发送回客户端。