发出第二个 HTTP 请求(在第一个结束之前)关闭与第一个的连接

Making Second HTTP Request (before first ends) closes connection to the first

我有一个网站,允许用户通过单击 href links 下载文件,这将调用 HTTP GET 请求和 return 文件(将在 IE 中提示用户并自动下载chrome)

        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);
            }
        }

当用户点击下载时 link:

<a href="/File/DownloadFile?FileUID=1111&amp;Facility=TestFacility&amp;Name=TestFile.pdf"><i class="file pdf outline icon"></i>TestFile.pdf</a>

点击另一个下载 link 之后(在第一次下载 link 收到 return 响应之前),客户端似乎关闭了与第一个请求的连接。它会给出这个错误:

远程主机关闭了连接。错误代码为0x800703E3.

当服务器尝试 return 将文件返回给用户时会抛出此错误,但由于连接已关闭而不能。

使用 Chrome 开发人员工具,我可以看到两个请求都在排队,但是一旦发送第二个请求,它就会取消第一个请求(关闭连接)。

Chrome Developer Request Cancelled

现在我已禁止用户单击另一个下载 link 直到上一个请求已 returned 但是我想知道是否有更优雅的解决方案来允许多个请求待发送等待?

(我已经在 Chrome 和 IE 11 中测试过,都取消了之前发送的请求)

提前致谢。

也许你可以使用下一个形式的函数来达到你的目标,我已经测试过它并且它不会停止接收文件,请告诉我这是否适合你:

public Stream Downloadfile(string filename)
        {
            WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=" + filename;
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/octet-stream";
            return File.OpenRead(filename);
        }

我找不到解决方案的答案。但是我能够改变我的 link 的工作方式。通过更改 links target="_blank" 它将打开一个新页面并在文件开始下载时关闭。这会阻止用户选择第二个 link 直到另一个 returns,而且如果他们使用鼠标中键打开 link 但不更改选项卡焦点,这也会阻止错误发生。我认为来自同一个选项卡的多个请求是问题所在。