发出第二个 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&Facility=TestFacility&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 但不更改选项卡焦点,这也会阻止错误发生。我认为来自同一个选项卡的多个请求是问题所在。
我有一个网站,允许用户通过单击 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&Facility=TestFacility&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 但不更改选项卡焦点,这也会阻止错误发生。我认为来自同一个选项卡的多个请求是问题所在。