У меня есть веб-сайт, который позволяет пользователям загружать файлы с помощью ссылок href, которые будут вызывать запрос HTTP GET и возвращать файл (подскажут пользователя в IE и автоматически -Скачать в хроме)Выполнение второго запроса HTTP (до первого конца) закрывает соединение с первым
public async Task<IActionResult> DownloadFile(DocumentFile file){
fileName = DocumentTask.RetrieveFiles(new string[1] { file.FileID }, file.Facility, UserData.Access).SingleOrDefault();
if (System.IO.File.Exists(fileName))
{
FileInfo info = new FileInfo(fileName);
return File(System.IO.File.ReadAllBytes(fileName), FileUtility.GetContentType(fileName), info.Name);
}
}
Когда пользователь нажимает на ссылку скачать:
<a href="/File/DownloadFile?FileUID=1111&Facility=TestFacility&Name=TestFile.pdf"><i class="file pdf outline icon"></i>TestFile.pdf</a>
и не сразу после того, как щелчки другой ссылки на скачивание (до первой загрузки ссылки вернулся ответ) он появляется клиент закрывает соединение с первым запросом. Он выдаст эту ошибку:
Удаленный хост закрыл соединение. Код ошибки: 0x800703E3.
Эта ошибка возникает, когда сервер пытается вернуть файл пользователю, но это невозможно, поскольку соединение было закрыто.
Используя инструменты разработчика Chrome, я вижу, что оба запроса попадают в очередь, но как только второй запрос отправляется, он отменяет первый запрос (закрывая соединение).
Chrome Developer Request Cancelled
Сейчас я отключил пользователь нажав другую ссылку для загрузки, пока предыдущий запрос не вернулось, однако я хотел бы знать, если есть более элегантное решение для обеспечения нескольких запросов, которые будут отправлены и ждал для?
(я проверил это в Chrome и IE 11 и оба отменить предыдущий запрос, отправленный)
Спасибо заранее.
Ваш клиент повторно использует один и тот же объект (XMLHttpRequest)? если вы это сделаете, проблема в том, что вы фактически отбрасываете предыдущий запрос. Если я ошибаюсь, было бы хорошо видеть код вашего клиента. –
@ Ronny-Barrera. Пожалуйста, посмотрите мое изменение выше для клиентского кода, это просто ссылка HREF, которая вызывает метод контроллера для возврата файла клиенту. Он не использует XMLHttpRequest. Запросы отправляются как запросы типа документа. –
Я боюсь, что у меня не было времени попробовать это раньше, но не помогло бы вам, если бы вы просто добавили в свою папку свой файл или жесткую ссылку, чтобы вы могли обойти запрос на обслуживание? –