Dynamisch generierte Datei in ASP.NET MVC herunterladen

7

Ich muss einen Dateidownload in ASP.NET MVC implementieren. Als ich das Web suchte, fand ich Code wie folgt:

%Vor%

Das ist nett, aber ich möchte den Inhalt dieser Datei dynamisch erstellen.

Ich weiß, dass ich die Datei dynamisch erstellen und dann die obige Syntax verwenden kann, um diese Datei herunterzuladen. Aber wäre es nicht effizienter, wenn ich meine Inhalte einfach direkt in die Antwort schreiben könnte? Ist das in MVC möglich?

    
Jonathan Wood 12.05.2012, 03:38
quelle

5 Antworten

12

Hier ist eine übermäßig vereinfachte Version des Codes, den ich benutzt habe. Es erfüllt meine Bedürfnisse.

%Vor%     
Jonathan Wood 12.05.2012, 04:51
quelle
3

Ich bin mir ziemlich sicher, dass das ein FileStreamResult ist. Aber wenn Sie es nicht verwenden möchten, schreiben Sie es einfach in die Antwort.

    
tzerb 12.05.2012 03:47
quelle
3

Wenn Sie es als Datei herunterladen möchten, dann können Sie eine benutzerdefinierte ActionResult versuchen, wie @Tungano vorschlagen, sonst, wenn Sie direkt in die Antwort wollen, dann wird die eingebaute ContentResult tun, aber es wird funktionieren mit einfachen Strings und im komplexen Szenario müssen Sie es erweitern.

%Vor%     
VJAI 12.05.2012 05:03
quelle
2

Sie können direkt in Response.OutputStream schreiben, ähnlich wie Sie in eine Datei streamen würden. Um es überprüfbar und MVC'ish zu halten, können Sie Ihre eigene ActionResult-Klasse erstellen, die das Streaming eines Modellobjekts durchführt, an dem Sie es übergeben.

    
Joppe 12.05.2012 04:06
quelle
1

Eine alternative Lösung besteht darin, die Überladung für File () zu verwenden, die einen Stream akzeptiert.

In meinem Fall ist es ein csv, das ich von einer Controller-Aktion erzeugen muss, also ist es ein bisschen so:

%Vor%

Beachten Sie, dass nicht den Stream oder den StreamWriter vor der Übergabe an die File () -Funktion entsorgen sollte, da das Löschen des Streams den Stream unbrauchbar macht.

    
kaitlinsm 05.10.2015 15:08
quelle

Tags und Links