5

Response.End()生成ThreadAbortException.

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

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

4

3 回答 3

11

Response.Flush()缓冲区中的内容发送给浏览器,但不会停止页面的处理,因此它将继续执行后续步骤。

要做的Response.End()停止 asp.net Page Life Cycle 中下一个函数调用的执行步骤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

于 2012-05-31T07:41:51.093 回答
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();
  }

经过大量的努力,它对我很有效。我希望它也适合你。

于 2013-06-11T07:12:01.003 回答
0

不!你不能!你可以

Response.SuppressContent = true;
于 2019-03-13T12:21:07.430 回答