Можем ли мы использовать ответ.Flush () Вместо ответа.Конец()
Response.End()
генерирует ThreadAbortException
.
Использование HttpContext.Current.ApplicationInstance.CompleteRequest
вместо него не решает проблему.
Итак, можем ли мы использовать Response.Flush()
вместо Response.End()
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(); }
Это хорошо работает на меня после долгой борьбы. Надеюсь, это сработает и для тебя.