我们可以使用 Response.Flush () 而不是 Response.End() 吗?
本文关键字:Response End Flush 可以使 我们 | 更新日期: 2023-09-27 18:35:45
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
这就是为什么它需要抛出一个异常,抛出一系列调用的循环。
一种选择是Response.Close()
但这也不是停止执行步骤,如果您在与浏览器的连接关闭后尝试发送某些内容,则可能会遇到其他错误。 如果你Response.Close()
你还需要在调用它之前做Flush()
否则浏览器会得到不可预测的数据。
您还可以阅读:重定向到具有 endResponse to true 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();
}
经过很多挣扎,它对我很有用。我希望它也对你有用。
不!你不能!您可以
Response.SuppressContent = true;