下载文件时为什么有两个请求?
Why two requests when I download a file?
我有一个为文件提供服务的操作:
public override FileContentResult Foo() {
var someDataAsBytes = ...
return File(someDataAsBytes, "text/csv", "somefilename.csv");
}
表格很简单:
<form method="get" action="/Foo" id="myForm">
<button type="submit">Download</button>
</form>
我通过脚本启动下载(所以页面不会改变):
$("#myForm").on("submit", function() {
window.location.href = $(this).attr("action");
return false;
});
问题是向服务器发送了两个请求:一个 GET 和一个 HEAD。该操作运行两次,但只提供一次文件。
如何让它只发送一个请求?或者这是正常行为?
额外信息:
我在 Fiddler 中对此进行了检查,对 GET 和 POST 的响应是相同的,除了 GET 具有非零 Content-Length
和实际有效负载数据。对 HEAD 的响应没有任何内容。两者都是 return 200 OK 状态码。这正常吗?
我没有发现您的代码有任何问题。我复制了您的代码并尝试重现您面临的问题。但我无法在 Chrome、IE 和 Firefox 中重现。
看起来这个问题是您的 FireFox 浏览器特有的,并且由于某些 plugin/Extension。禁用浏览器中的所有插件并尝试一下,它应该可以。
您的脚本中缺少 e.preventDefault()
。这里发生的是你的动作同时被脚本和正常 post 击中。所以如果你把 e.preventDefault()
像下面这样,那么它会阻止浏览器的默认 post 返回并且只有 javascript 的代码会执行你的请求。
$("#myForm").on("submit", function(e) {
e.preventDefault();
window.location.href = $(this).attr("action");
});
我有一个为文件提供服务的操作:
public override FileContentResult Foo() {
var someDataAsBytes = ...
return File(someDataAsBytes, "text/csv", "somefilename.csv");
}
表格很简单:
<form method="get" action="/Foo" id="myForm">
<button type="submit">Download</button>
</form>
我通过脚本启动下载(所以页面不会改变):
$("#myForm").on("submit", function() {
window.location.href = $(this).attr("action");
return false;
});
问题是向服务器发送了两个请求:一个 GET 和一个 HEAD。该操作运行两次,但只提供一次文件。
如何让它只发送一个请求?或者这是正常行为?
额外信息:
我在 Fiddler 中对此进行了检查,对 GET 和 POST 的响应是相同的,除了 GET 具有非零 Content-Length
和实际有效负载数据。对 HEAD 的响应没有任何内容。两者都是 return 200 OK 状态码。这正常吗?
我没有发现您的代码有任何问题。我复制了您的代码并尝试重现您面临的问题。但我无法在 Chrome、IE 和 Firefox 中重现。
看起来这个问题是您的 FireFox 浏览器特有的,并且由于某些 plugin/Extension。禁用浏览器中的所有插件并尝试一下,它应该可以。
您的脚本中缺少 e.preventDefault()
。这里发生的是你的动作同时被脚本和正常 post 击中。所以如果你把 e.preventDefault()
像下面这样,那么它会阻止浏览器的默认 post 返回并且只有 javascript 的代码会执行你的请求。
$("#myForm").on("submit", function(e) {
e.preventDefault();
window.location.href = $(this).attr("action");
});