Response.End() генерирует ThreadAbortException.
Использование HttpContext.Current.ApplicationInstance.CompleteRequest вместо него не решает проблему.
Итак, можем ли мы использовать Response.Flush() вместо Response.End()
Response.End() генерирует ThreadAbortException.
Использование HttpContext.Current.ApplicationInstance.CompleteRequest вместо него не решает проблему.
Итак, можем ли мы использовать Response.Flush() вместо Response.End()
Response.Flush() отправляет браузеру то, что находится в буфере, но не останавливает обработку страницы, поэтому он продолжит выполнение следующих шагов.
Что Response.End() делать , так это останавливать шаги выполнения при следующем вызове функции в жизненном цикле страницы asp.net. http://msdn.microsoft.com/en-us/library/ms178472.aspx
И поэтому нужно сгенерировать исключение, чтобы выкинуть из цикла серию вызовов.
Одной из альтернатив является Response.Close(), но это также не останавливает этапы выполнения, и, вероятно, у вас есть другая ошибка, если вы попытаетесь отправить что-то после закрытия соединения с браузером. если вы делаете Response.Close(), вам также нужно сделать Flush() непосредственно перед его вызовом, иначе браузер получит непредсказуемые данные.
вы также можете прочитать: Перенаправить на страницу с endResponse на истинный 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();
}
У меня это хорошо работает после долгой борьбы. Надеюсь, это сработает и для вас.
Нет! Тебе нельзя! Ты сможешь
Response.SuppressContent = true;