我们可以使用Response.Flush()而不是Response.End()
Response.End()
生成ThreadAbortException
。
使用HttpContext.Current.ApplicationInstance.CompleteRequest
代替它并不能解决问题。
那么,我们可以使用Response.Flush()
而不是Response.End()
Response.Flush()
被发送到浏览器上的缓冲区,但不会停止页面的处理,因此它将继续执行下一步。
什么是Response.End()
做的是停止asp.net页面生命周期中下一个函数调用的执行步骤 。 http://msdn.microsoft.com/en-us/library/ms178472.aspx
这就是为什么它需要抛出exception,抛出一系列调用的循环。
一个替代方案是Response.Close()
但这也不会停止执行步骤,如果您尝试在与浏览器关闭后发送内容,则可能还有其他错误。 如果你做Response.Close()
你需要在调用它之前做Flush()
,否则浏览器会得到不可预测的数据。
您还可以阅读: 重定向到endResponse为真的VS CompleteRequest和安全线程的页面
在下载文件Response.IsClientConnected
之前使用条件 –
if (Response.IsClientConnected) { Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "Application/pdf"; Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName); Response.TransmitFile(Server.MapPath(@"yourpath" + fileName)); Response.Flush(); Response.Close(); }
经过多次努力,这对我很有用。 我希望它对你也有用。