So erlauben Sie das Herunterladen von .json-Dateien mit ASP.NET


125

Wie kann ich den Download von * .json-Dateien von einer alten ASP.NET-Site aktivieren (IIS6, wie ich glaube)?

Ich erhalte eine 404-Seite anstelle der JSON-Datei.

Muss ich eine web.config-Datei erstellen? Was ist drin?


1
Sie müssen wahrscheinlich einen MIME-Typ hinzufügen .
vcsjones

1
Zur Verwendung in einem Javascript oder zum Speichern auf einer Festplatte?
Remy

Ich möchte über jQuery.ajax darauf zugreifen (URL: ...
Lea Hayes

2
Wenn Sie hinzufügen, dass der lokale IIS nach einer Auflistung bei Ihrer nächsten Bereitstellung möglicherweise einen 500-Server-Fehler aus einer doppelten Auflistung auslöst, kommentieren Sie ihn aus.
Tom Mallard

Antworten:


118

Hinzufügen des JSON-MIME-Typs zu IIS 6. Befolgen Sie die Anweisungen unter MSDN Configure MIME Types (IIS 6.0) .

  • Erweiterung: .json
  • MIME-Typ: application / json

Vergessen Sie nicht, IIS nach der Änderung neu zu starten.

UPDATE: Es gibt einfache Möglichkeiten, dies unter IIS7 und neuer zu tun. Die Operation hat speziell um IIS6-Hilfe gebeten, daher lasse ich diese Antwort unverändert. Aber diese Antwort bekommt immer noch viel Verkehr, obwohl IIS6 jetzt sehr alt ist. Hoffentlich verwenden Sie etwas Neueres. Wenn Sie ein neueres IIS7 oder eine neuere Version haben, finden Sie in der Antwort von @ ProVega unten eine einfachere Lösung für diese neueren Versionen.


1
Prost, aber dies ist auf einem Shared Hosting-Paket ohne Zugriff auf etwas anderes als web.config oder globale Codedatei
Lea Hayes

Wenn Sie keinen Zugriff auf die IIS 6.0-Einstellungen haben und der Support Ihres Anbieters den MIME-Typ nicht für Sie hinzufügt, müssen Sie den Anbieter oder auf neuere Server mit IIS 7.0 auf diesem Anbieter wechseln, wenn dieser dies anbietet unterstütze dies.
Jon Adams

1
Ja, ASP.Net kann die Datei über einen ASPX-Handler oder sogar eine einfache Seite weiterleiten, aber Sie können den .json-Dateityp in der URL nicht verwenden, da diese Anforderung nicht an ASP.Net weitergeleitet wird Laufzeit. Es muss etwas sein, das die ASPX-Laufzeit durchläuft. Wenn Sie keinen Zugriff auf IIS-Einstellungen haben, muss es sich um eine der vorhandenen Erweiterungen handeln .ASPX. Auch hier bietet der Wechsel zu einem Server mit IIS7 viele weitere und einfachere Lösungen.
Jon Adams

1
Ein Neustart des App-Pools sollte ausreichen (in meinem Fall), anstatt IIS insgesamt neu zu starten.
27.

1
@kltft Richtig, ein Apppool-Neustart löst das Update aus, aber natürlich nur für diesen Pool. Diese Schritte umfassen das Ändern der Einstellung für alle Benutzer, und das Festlegen einer inkonsistenten Einstellungsebene kann später leicht zu Verwirrung führen. Ich empfehle, den gesamten Prozess aus Sicherheits- und Gesundheitsgründen neu zu starten. Aber zur Not könnte ein Neustart des Apppools funktionieren, wenn alle den Vor- und Nachteilen zustimmen.
Jon Adams

211

Wenn Sie Ihrer Site manuell Unterstützung hinzufügen möchten, können Sie Ihrer web.config im Abschnitt system.webServer einfach Folgendes hinzufügen :

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

Dadurch wird eine "lokale" Konfiguration unter IIS hinzugefügt. Dies funktioniert nicht in IIS6, aber in IIS7 und neueren Versionen.


6
Ihre Antwort wurde aktualisiert und enthält nun den vollständigen web.configPfad.
GFoley83

Lebensretter, danke :)
Gaurav123

1
Aus irgendeinem Grund hat dies meine gesamte Website durcheinander gebracht - CSS hat nicht mehr funktioniert!
TheJeff

@TheJeff - das ist mir passiert, aber es liegt daran, dass ich zwei staticContent-MimeMaps hinzugefügt habe, eine für JSON (erforderlich) und eine für CSV (redundant, ich nahm an, dass dies erforderlich war, aber die IISExpress-Anwendungskonfiguration hatte bereits CSV). Daher habe ich diesen Fehler jedes Mal erhalten, wenn ich versucht habe, auf eine statische Datei zuzugreifen: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' Sobald ich das Duplikat entfernt habe, kein Problem.
Die rote Erbse

1
Dadurch wird das Problem behoben, wenn Sie lokal ausgeführt werden. Achten Sie jedoch beim Live-Push darauf. Wenn die mimeMap bereits global in IIS konfiguriert ist, werden 500 Fehler angezeigt. Entfernen Sie in diesem Fall einfach dieses Teil aus Ihrer web.config.
Evan

20

Die Lösung besteht darin, dass Sie den Mson-Dateierweiterungstyp in MIME-Typen hinzufügen müssen

Methode 1

Gehen Sie zu IIS, wählen Sie Ihre Anwendung aus und suchen Sie nach MIME-Typen

Geben Sie hier die Bildbeschreibung ein

Klicken Sie im rechten Bereich auf Hinzufügen

Dateinamenerweiterung = .json

MIME-Typ = application / json

Geben Sie hier die Bildbeschreibung ein

Nach dem Hinzufügen .json Dateitypen in MIME - Typ , IIS neu starten und versuchen , dem Zugriff auf JSON - Datei


Methode 2

Gehen Sie zu web.config dieser Anwendung und fügen Sie diese Zeilen hinzu

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>

15

Wenn Sie Unterstützung für Mimetyp hinzufügen (wie von @ProVega vorgeschlagen), empfiehlt es sich auch, den Typ vor dem Hinzufügen zu entfernen. Dies verhindert unerwartete Fehler bei der Bereitstellung auf Servern, auf denen bereits Unterstützung für den Typ vorhanden ist, z.

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

Wenn Sie nur die mimeMap hinzufügen, werden manchmal Ihre CSS-Stile entfernt. Der richtige Weg ist also, sie zuerst zu entfernen, vielen Dank
sgrysoft

Pfad zur Konfigurationsdatei in der IIS7- C:\Windows\System32\inetsrv\configDatei: applicationHost.config
OO

5

Hatte gerade dieses Problem, musste aber die Konfiguration für IIS Express finden, damit ich die MIME-Typen hinzufügen konnte. Für mich befand es sich bei C:\Users\<username>\Documents\IISExpress\config\applicationhost.configund ich konnte dort die richtige "Pantomime-Karte" hinzufügen.


Dies kann der Grund sein, warum es bei mir nicht über IIS Express funktioniert. Leider möchte ich dies nicht auf jedem Entwicklungscomputer konfigurieren müssen. Es sieht also so aus, als würde ich empfehlen, die JS-Erweiterung für JSON-Konfigurationsdateien beizubehalten.
Jpierson

Sie können dies auch in Web.Config tun - Sehen Sie sich diese Antwort an stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@ SimchaKhabinsky Für mich war die web.config nicht genug.
Jean-Bernard Pellerin

3
Wenn die web.config nicht ausreicht, müssen Sie diese Zeile möglicherweise vor dem <mimeMap>Knoten hinzufügen : <remove fileExtension=".json" />. Sie sollten nicht die applicationhost.config (oder machine.config) berühren müssen. Das Ändern dieser Dateien kann jedoch nützlich sein, wenn Sie häufig neue Websites erstellen und nicht die web.config für jede Website ändern müssen. Das mag für Entwicklungsumgebungen funktionieren, aber häufig können Sie die machine.config in Produktionsumgebungen nicht berühren. Daher würde ich dennoch empfehlen, die Änderung in der web.config vorzunehmen.
Gilly3

1
Danke @ gilly3 - das removewar der Schlüssel für mich
harriyott

0
  1. Navigieren Sie zu C: \ Benutzer \ Benutzername \ Dokumente \ IISExpress \ config
  2. Öffnen Sie applicationhost.config mit Visual Studio oder Ihrem bevorzugten Texteditor.
  3. Suchen Sie nach dem Wort mimeMap, Sie sollten viele von ihnen finden.
  4. Fügen Sie die folgende Zeile oben in die Liste ein :.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.