Response.End()
生成ThreadAbortException
。
使用HttpContext.Current.ApplicationInstance.CompleteRequest
代替它并不能解决问题。
因此,我们可以使用Response.Flush()
代替Response.End()
答案 0 :(得分:10)
Response.Flush()
向浏览器发送缓冲区内的内容,但不会停止处理页面,因此它将继续执行下一步。
Response.End()
做什么是停止asp.net页面生命周期中下一个函数调用的执行步骤。 http://msdn.microsoft.com/en-us/library/ms178472.aspx
这就是为什么它需要抛出异常,抛弃一系列调用的循环。
另一种选择是Response.Close()
,但这也不会停止执行步骤,如果您尝试在与浏览器关闭后发送内容,则可能还有其他错误。如果您执行Response.Close()
,则需要在调用之前执行Flush()
,否则浏览器会收到不可预测的数据。
您还可以阅读:Redirect to a page with endResponse to true VS CompleteRequest and security thread
答案 1 :(得分:4)
在下载文件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();
}
经过多次努力,这对我很有帮助。我希望它也适合你。
答案 2 :(得分:0)
不!你不能! 您可以
Response.SuppressContent = true;