在过去的几天里,我一直在尝试解决这个问题。我已经进行了详尽的谷歌搜索,尝试了许多解决方案,但没有运气。
本质上,我正在尝试将数据导出到 CSV 并下载。该代码有效,但引发异常。我的特殊用法需要连续进行多次下载(如下面的示例),但例外情况会阻止这种情况发生。
string attachment = string.Format("attachment; filename={0}_OutPut.csv", companyName);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.AddHeader("Pragma", "public");
WriteColumnName("Column1,Column2,Column3");
StringBuilder stringBuilder = new StringBuilder();
foreach (Item i in list.Items)
{
AddData(i.TaxCodeValue.ToString(), stringBuilder);
AddData(i.Description.ToString(), stringBuilder);
AddData(i.Description.ToString(), stringBuilder);
stringBuilder.Length = 0; //Reset Stringbuilder value
HttpContext.Current.Response.Write(stringBuilder.ToString());
HttpContext.Current.Response.Write(Environment.NewLine);
}
HttpContext.Current.Response.End(); <---This is the problem
我读了:
http://support.microsoft.com/kb/312629
我了解 Response.End() 引发异常,因为它正在中止线程(通常不建议)。但是,对于我的情况,我没有看到任何替代方案。
我尝试过的一些事情:
HttpContext.Current.ApplicationInstance.CompleteRequest();
作为 Response.End() 的替代方法。它导致我的 CSV 被垃圾填满,而不是我正在编写的实际数据。HttpContext.Current.Response.Redirect("Page.aspx", false);
只是刷新页面,并没有下载写入的数据。- 在 catch 块中捕获异常。它总是设法逃脱并激起涟漪。
有任何想法吗?
先感谢您。