3 Stimmen

Ein .ashx generischer Handler für alle Dateitypen?

Ich habe die grundlegenden Informationen auf MSDN und ein paar Tutorials durchgelesen. Aus dem, was ich bisher gelernt habe, konnte ich zwei .ashx-Handler erstellen, die ich ImageHandler.ashx und PDFHandler.ashx nenne. Sie tun, was man erwarten würde: Bilder oder PDFs zurückgeben. Für beide dieser Handler setze ich im ProcessRequest-Methoden-Code context.Response.ContentType auf "image/jpeg" bzw. "application/pdf" und schreibe dann das Ergebnis mit context.Response.BinaryWrite(bytes). Bisher funktioniert das einwandfrei.

Allerdings möchte ich dem Benutzer die Möglichkeit geben, jede Datei herunterzuladen, unabhängig vom Dateityp. Muss ich wirklich für jeden Dateityp einen anderen Handler erstellen?

Kann ich einfach eine .ashx-Datei haben und dann eine switch-Anweisung basierend auf dem Dateityp haben (den ich durch Unterteilung des Dateinamens erhalten würde)? Selbst wenn ich das mache, was ist mit Dateitypen, die nicht standardmäßig sind, wie zum Beispiel .xyz-Dateien? Was setze ich in diesem Fall für context.Response.ContentType?

3voto

Marc Gravell Punkte 970173

Nein, du brauchst nicht mehrere Handler, vor allem nicht, wenn die grundlegende Operation dieselbe ist. Ja, du kannst jede Art von Logik verwenden, um zu entscheiden, auf welchen Antwortinhaltstyp du setzen möchtest. Für etwas, das du nicht kennst, verwende application/octet-stream. Du solltest auch in Betracht ziehen, den "content-disposition" Header zu setzen, der dir die Möglichkeit gibt vorzuschlagen, ob es "inline" (also im Browser) angezeigt werden soll oder als Download angeboten wird - und was der logische Dateiname ist (anstatt einiger ashx Seite).

2voto

saluce Punkte 12439

Sie können Content-Type: application/octet-stream festlegen und den Browser basierend auf der Dateierweiterung entscheiden lassen, was zu tun ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X