asp.net iactionresult Warum zwei Anfragen, wenn ich eine Datei herunterlade?




asp net core web api response header (2)

Ich habe eine Aktion, die eine Datei bedient:

public override FileContentResult Foo() {
  var someDataAsBytes = ...
  return File(someDataAsBytes, "text/csv", "somefilename.csv");
}

Das Formular ist einfach:

<form method="get" action="/Foo" id="myForm">
  <button type="submit">Download</button>
</form>

Ich initiiere den Download via Skript (damit sich die Seite nicht ändert):

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

Problem ist, dass zwei Anfragen an den Server gesendet werden: ein GET und ein HEAD. Und die Aktion wird zweimal ausgeführt, aber nur einmal ausgeführt.

Wie bekomme ich es, nur eine Anfrage zu senden? Oder ist das normales Verhalten?

Zusatzinformation:
Ich habe dies in Fiddler untersucht, und die Antworten auf GET und POST sind identisch, außer dass das GET eine Inhaltslänge ungleich Null und die tatsächlichen Nutzlastdaten hat. Die Antwort auf den HEAD hat nichts. Beide geben 200 OK-Statuscodes zurück. Ist das normal?


Sie fehlen mit e.preventDefault() in Ihrem Skript. Was hier passiert, ist, dass deine Aktion sowohl vom Skript als auch vom normalen Post beeinflusst wird. Also, wenn Sie e.preventDefault() wie unten setzen, dann wird es das Standard-Postback des Browsers verhindern und nur JavaScript-Code wird Ihre Anfrage ausführen.

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

Ich sehe nichts falsch mit Ihrem Code. Ich habe Ihren Code repliziert und versucht, das Problem zu reproduzieren, mit dem Sie konfrontiert sind. Aber ich bin nicht in der Lage, in Chrome, IE und Firefox zu reprojizieren.

Es sieht so aus, als ob dieses Problem spezifisch für den FireFox-Browser von Ihnen ist und aufgrund eines Plugins / Extension. Deaktivieren Sie alle Plugins im Browser und probieren Sie es aus, es sollte funktionieren.





http-headers