Можем ли мы использовать Response.Flush() вместо Response.End()

Response.End() генерирует ThreadAbortException.

Использование HttpContext.Current.ApplicationInstance.CompleteRequest вместо этого не решает проблему.

Итак, можно ли использовать Response.Flush() вместо Response.End()

Ответ 1

Response.Flush() отправляет браузеру то, что находится в буфере, но не останавливает обработку страницы, поэтому он продолжит выполнение следующих шагов.

Что такое Response.End() сделать , чтобы остановить шаги выполнения при следующем вызове функции в жизненном цикле страницы asp.net. http://msdn.microsoft.com/en-us/library/ms178472.aspx

И зачем ему нужно выкинуть исключение, выкинуть из цикла серию вызовов.

Один из вариантов - это Response.Close(), но это также не останавливает выполнение шагов, и, возможно, у вас есть другая ошибка, если вы попытаетесь отправить что-то после закрытия соединения с браузером. если вы выполняете Response.Close(), вам также нужно сделать Flush() непосредственно перед его вызовом, иначе браузер получит непредсказуемые данные.

вы также можете прочитать: Перенаправить на страницу с endResponse в true VS CompleteRequest и поток безопасности

Ответ 2

Используйте условие перед загрузкой файла 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();
  }

Он работает для меня хорошо после много борьбы. Я надеюсь, что это сработает и для вас.