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

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

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

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


person user1509    schedule 31.05.2012    source источник


Ответы (3)


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

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

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

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

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

person Aristos    schedule 31.05.2012

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

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

person Viishnuu    schedule 11.06.2013

Нет! Тебе нельзя! Ты сможешь

Response.SuppressContent = true;
person Pit J    schedule 13.03.2019
comment
В своем ответе вы должны пояснить, почему вы не можете этого сделать, и свое решение. - person Florian Blume; 13.03.2019
comment
Прочтите о помощи Flush (). Это будет считаться загрузкой содержимого страницы и не будет отправлять взаимодействие в браузер. Только SuppressContent = true и End () будут делать это. - person Pit J; 13.03.2019