2009-06-22 12 views
4

Ich möchte auf eine HTTP-Anfrage mit einer txt-Datei und einer HTML-Seite antworten. Auf diese Weise kann der Client die Datei speichern und eine Zusammenfassung des Inhalts dieser Datei über eine HTML-Seite anzeigen.Ein benutzerdefiniertes ActionResult für eine mehrteilige HTTP-Antwort?

Da die Datei im laufenden Betrieb generiert wird, muss ich die Statusverwaltung auf dem Server verwenden, um die Zusammenfassung für die zweite Anforderung zu generieren. Ich möchte das vermeiden und dies in einer einzigen Antwort zusammenfassen.

Wie würde das benutzerdefinierte ActionResult aussehen?

Antwort

2

Dies war also discussed here on SO.

i beantwortet er so:

Nein, mehrteiliger Ausrüstung herunterladen (wie wie in E-Mail) sind nicht aus Sicherheitsgründen nicht unterstützt. Es ist namens "Drive-by-Download".

Beachten Sie, dass Gmail dies durch verarbeitet dynamisch die Dateien komprimieren. Sie sollten auch . http://forums.asp.net/t/1240811.aspx

Ich glaube nicht, jeder moderne Browser multipart/mixed unterstützt.

-1

Warum die Zusammenfassung als normale HTML-Ansicht nicht machen und einen Link unter dieser Zusammenfassung, die zu einem separaten Actionpunkte, die binäre Daten zurückgibt ...

public ActionResult SendFile(int id) 
    { 
     File file = FileRepository.GetFile(id); 
     byte[] fileData = file.FileData.ToArray(); 
     return File(fileData, file.FileMimeType, file.FileName); 
    } 
+0

Ich mache das schon. Diese Methode zwingt mich, eine Statusverfolgung auf dem Server durchzuführen, da die zweite Aktion nicht über die Daten verfügt, die zum Rendern des ersten HTML-Formulars verwendet wurden. Ich sehe, ob es eine Möglichkeit gibt, dies zu tun, ohne sich mit der Sitzung zu befassen (also einschließlich tempdata). –

+0

Die Daten werden im Handumdrehen generiert - ich könnte sie auch in einer db speichern, aber das ist nur eine weitere Form der Statusverfolgung. Es sollte weggeworfen werden. –

0

Sie XML mit Bezug auf ein Stylesheet schicken könnte . Der Browser kann die Umwandlung durchführen und eine resultierende HTML-Ausgabe anzeigen.

Und der Benutzer kann einfach "Datei-> Speichern unter ...", um die XML-Datei zu speichern.

+0

Danke für den Brainstorm. Leider ist meine Datei nicht XML und kann nicht sein. Sein Format wird durch ein Legacy-Buchhaltungssystem bestimmt. Gedanken zur mehrteiligen Antwort? –

+0

Wie groß ist die typische Größe Ihrer Antwortdaten? – mkoeller

-1

Ich habe eine Suche zu diesem Thema gemacht und zu meiner Überraschung scheint dies, dass die Leute das schon gemacht haben. Ich fand eine Beschreibung here, aber es stellt keine öffentliche Test-URI zur Verfügung, so dass ich das Verhalten des Browsers nicht testen konnte. Es erwähnt auch die Lösung, um eine Archivdatei an den Client zu senden. Aber ich nehme an, das ist nicht das, wonach Sie suchen, oder?

Here ist ein weiterer Artikel, der ein Beispiel mit mehrteiligen Antworten zeigt. Leider scheint die Demo-URI nicht mehr zu funktionieren.

So ist die Situation: HTTP-Multipart-Antworten können durchgeführt werden. Es gibt Client (wenige) Bibliotheken, um diese im Anwendungscode zu handhaben. Das Browserverhalten soll getestet werden (Here's a voice). Die Verwendung dieser Funktion scheint experimentell zu sein und kann nur empfohlen werden, wenn Sie beide Enden der Kommunikation steuern können, um Interoperabilitätsprobleme zu beseitigen.