Asp.net 为什么下载文件时会有两个请求?

Asp.net 为什么下载文件时会有两个请求?,asp.net,asp.net-mvc,http-headers,Asp.net,Asp.net Mvc,Http Headers,我有一个服务于文件的操作: public override FileContentResult Foo() { var someDataAsBytes = ... return File(someDataAsBytes, "text/csv", "somefilename.csv"); } 形式很简单: <form method="get" action="/Foo" id="myForm"> <button type="submit">Download&l

我有一个服务于文件的操作:

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>
问题是向服务器发送了两个请求:一个GET和一个HEAD。操作运行两次,但只为文件提供一次服务

我如何让它只发送一个请求?还是这是正常的行为

额外信息:

我在Fiddler中检查了这一点,对GET和POST的响应是相同的,除了GET具有非零的
内容长度和实际的有效负载数据。对头部的反应毫无意义。两者都返回200个OK状态代码。这正常吗?

我看不出您的代码有任何问题。我复制了你的代码,并试图重现你所面临的问题。但我无法在Chrome、IE和Firefox中重新编程


看起来这个问题是针对您的FireFox浏览器的,是由于一些插件/扩展造成的。禁用浏览器中的所有插件并尝试一下,它应该可以工作。

脚本中缺少
e.preventDefault()
。这里发生的是你的动作被脚本和普通帖子击中。所以,如果您像下面这样放置
e.preventDefault()
,那么它将阻止浏览器的默认回发,只有javascript的代码才会执行您的请求

$("#myForm").on("submit", function(e) {
  e.preventDefault();
  window.location.href = $(this).attr("action");
});

你能发布html吗?特别是
表单
标签。我在本地复制了您的代码,但无法再次命中。可能是代码的其他部分导致了问题。chrome版本43.0.2357.81事实上,在Firefox中,我尝试过,但无法再现您的问题。您是否可以禁用FF中的所有插件并尝试一下,然后让我知道,然后我可以将解决方案发布为答案:-)不正确。在jQuery处理程序中,
return false
表示1)
preventDefault()
,2)
stopPropagation()
和3)立即返回false。
$("#myForm").on("submit", function(e) {
  e.preventDefault();
  window.location.href = $(this).attr("action");
});