Обязательно ли Response.End() в данном сценарии?
string filePath = ExportAndSaveInvoiceAsHtml(invoiceId);
Response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(filePath));
Response.WriteFile(filePath);
// Using Response.End() solves the problem
// Response.End();
Я хочу, чтобы пользователи могли загружать HTML-счета (из gridView счетов-фактур). Полученный файл содержит данные файла счета-фактуры + нежелательные HTML страницы.
Если я использую Response.End(), это решает проблему, но всегда вызывает исключение. Читайте в некоторых темах, что исключение сделано по проекту. Но тогда это точно, это не вызовет проблемы, такие как усечение ответа или так в любое время?
Как еще я могу написать просто данные файла.
Кстати, ранее мы писали счет-фактуру в формате PDF, и тогда не использовали Response.End(), что привело к неполной загрузке файла.
Может кто-нибудь дать основы записи пользовательских данных / файла в поток ответов.
2 ответа
Это потому, что ответ буферизован. Вы должны вызвать Response.End(), чтобы очистить буферы и убедиться, что клиент получает полный ответ до завершения потока обработчика.
Исключение ThreadAbortException, создаваемое Response.End()
это дизайн и может быть безопасно проигнорировано.
Вместо Response.End() вы можете использовать
HttpContext.Current.ApplicationInstance.CompleteRequest()
Этот метод имеет тенденцию избегать бросать исключения:)