Можем ли мы использовать ответ.Flush () Вместо ответа.Конец()


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

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

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

2 3

2 ответа:

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

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

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

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

Вы также можете прочитать: перенаправление на страницу с endResponse на 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();
  }

Это хорошо работает на меня после долгой борьбы. Надеюсь, это сработает и для тебя.