我们可以使用 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() 吗?

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;