我们可以使用Response.Flush()而不是Response.End()

时间:2012-05-31 07:28:15

标签: c# asp.net response httpcontext response.redirect

Response.End()生成ThreadAbortException

使用HttpContext.Current.ApplicationInstance.CompleteRequest代替它并不能解决问题。

因此,我们可以使用Response.Flush()代替Response.End()

吗?

3 个答案:

答案 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;