在给定方案中,Response.End()是否必需?

时间:2011-02-01 12:47:52

标签: asp.net response.write

string filePath = ExportAndSaveInvoiceAsHtml(invoiceId);      

Response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(filePath));

Response.WriteFile(filePath);

// Using Response.End() solves the problem
// Response.End();

我想让用户下载HTML发票(来自发票的gridView)。生成的文件还包含发票文件数据+不需要的页面html。

如果我使用Response.End(),它解决了问题,但它总是抛出异常。在某些线程中读取异常是设计的。但是,它确定,它不会导致响应截断等问题随时出现?

我怎样才能写出文件数据。

顺便说一句,早些时候我们把发票写成了PDF,那时候没有使用Response.End()导致文件下载不完整。

有人可以提供将自定义数据/文件写入Response流的基础知识。

2 个答案:

答案 0 :(得分:2)

那是因为响应是缓冲的。您必须调用Response.End()来刷新缓冲区并确保客户端在处理程序线程完成之前获得完整的响应。

Response.End()引发的ThreadAbortException是设计使然,可以安全地忽略。

答案 1 :(得分:1)

您可以使用

代替Response.End()
HttpContext.Current.ApplicationInstance.CompleteRequest()

这种方法倾向于避免抛出异常:)