Come consentire il download di file .json con ASP.NET


125

Come posso abilitare il download di file * .json da un vecchio sito ASP.NET (IIS6, mi viene fatto credere)?

Ricevo una pagina 404 invece del file JSON.

Devo creare un file web.config? Cosa c'è dentro?


1
Probabilmente dovrai aggiungere un tipo MIME per questo.
vcsjones,

1
Per l'uso in un javascript o per salvare su un hd?
Remy,

Voglio accedervi tramite jQuery.ajax (url: ...
Lea Hayes,

2
Aggiungendo che dopo che IIS locale ha un elenco, alla prossima distribuzione potrebbe generare un errore del server 500 da un elenco duplicato, quindi commentarlo.
Tom Mallard,

Risposte:


118

Aggiungere il tipo MSON JSON a IIS 6. Seguire le istruzioni in Configura tipi MIME di MSDN (IIS 6.0) .

  • Estensione: .json
  • Tipo MIME: application / json

Non dimenticare di riavviare IIS dopo la modifica.

AGGIORNAMENTO: ci sono modi semplici per farlo su IIS7 e versioni successive. L'op ha chiesto specificamente l'aiuto di IIS6, quindi lascio questa risposta così com'è. Ma questa risposta sta ancora ricevendo molto traffico anche se IIS6 è molto vecchio ora. Spero che tu stia usando qualcosa di più recente, quindi volevo menzionare che se hai un IIS7 più recente o una versione più recente vedi la risposta di @ ProVega di seguito per una soluzione più semplice per quelle versioni più recenti.


1
Saluti ma questo è su un pacchetto di hosting condiviso senza accesso a qualsiasi cosa diversa da web.config o file di codice globale
Lea Hayes,

Se non hai accesso alle impostazioni di IIS 6.0 e il supporto del tuo provider non aggiungerà il tipo MIME per te, dovrai cambiare provider o ai server più recenti con IIS 7.0 su quel provider se lo offrono, a sostenere questo.
Jon Adams,

1
Sì, ASP.Net può passare il file tramite un gestore ASPX o anche una semplice pagina, ma non sarà possibile utilizzare il tipo di file .json nell'URL poiché non passerà tale richiesta ad ASP.Net runtime. Dovrà essere qualcosa che passa attraverso il runtime ASPX. Se non hai accesso alle impostazioni di IIS, dovrà essere una delle estensioni esistenti come .ASPX. Ancora una volta, il passaggio a un server con IIS7 offre molte altre soluzioni più semplici.
Jon Adams,

1
Il riavvio del pool di app dovrebbe essere sufficiente (era nel mio caso), piuttosto che riavviare IIS del tutto.
kltft

1
@kltft True, un riavvio dell'apppool attiverà l'aggiornamento, ma solo per quel pool ovviamente. Questi passaggi includono la modifica delle impostazioni per tutti e il fatto di trovarle in un livello incoerente delle impostazioni porterebbe facilmente a confusione in un secondo momento. Consiglio di riavviare l'intero processo IIS per sicurezza e sanità mentale. Ma in un pizzico, se tutti sono d'accordo con i pro / contro, un riavvio di apppool potrebbe funzionare.
Jon Adams,

211

Se vuoi aggiungere manualmente il supporto al tuo sito, puoi semplicemente aggiungere quanto segue a web.config nella sezione system.webServer :

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

Ciò aggiungerà una configurazione "locale" in IIS. Questo non funziona in IIS6, ma funziona in IIS7 e versioni successive.


6
Aggiornata la risposta per includere il web.configpercorso completo .
GFoley83,


1
Per qualche ragione, questo ha incasinato tutto il mio sito - CSS non ha più funzionato!
TheJeff

@TheJeff - è successo a me, ma è perché ho aggiunto due mimeMap di staticContent, uno per JSON (necessario) e uno per CSV (ridondante, supponevo fosse necessario, ma l'applicazione IISExpress applicationConfig aveva già CSV). Pertanto ho riscontrato questo errore ogni volta che ho provato ad accedere a qualsiasi file statico: una Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' volta rimosso il duplicato, nessun problema.
The Red Pea,

1
Questo risolverà il problema quando si esegue localmente, ma prestare attenzione quando si spinge dal vivo. Se mimeMap è già configurato a livello globale in IIS, verranno visualizzati 500 errori. In questo caso, rimuovi semplicemente questo pezzo dal tuo web.config.
Evan,

20

La soluzione è che è necessario aggiungere il tipo di estensione del file json nei tipi MIME

Metodo 1

Vai su IIS, seleziona la tua applicazione e trova i tipi MIME

inserisci qui la descrizione dell'immagine

Fai clic su Aggiungi dal pannello di destra

Estensione nome file = .json

Tipo MIME = application / json

inserisci qui la descrizione dell'immagine

Dopo aver aggiunto il tipo di file .json nei tipi MIME , riavviare IIS e provare ad accedere al file json


Metodo 2

Vai a web.config di quell'applicazione e aggiungi queste righe al suo interno

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

15

Quando si aggiunge il supporto per mimetype (come suggerito da @ProVega), è anche consigliabile rimuovere il tipo prima di aggiungerlo, per evitare errori imprevisti durante la distribuzione su server in cui esiste già il supporto per il tipo, ad esempio:

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

Quando aggiungi solo la mimeMap, a volte rimuove i tuoi stili css, quindi, il modo corretto è rimuoverlo per primo, grazie mille
sgrysoft,

Percorso del file di configurazione nel file IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO

5

Ho appena avuto questo problema, ma ho dovuto trovare la configurazione per IIS Express in modo da poter aggiungere i tipi MIME. Per me, si trovava in C:\Users\<username>\Documents\IISExpress\config\applicationhost.confige sono stato in grado di aggiungere la "mappa mime" corretta lì.


Questo potrebbe essere il motivo per cui non funziona per me tramite IIS Express. Sfortunatamente questo non è qualcosa che vorrei configurare su ogni macchina di sviluppo, quindi sembra che ti consiglierò di utilizzare l'estensione .js per i file di configurazione json.
jpierson,

Si può anche farlo in web.config - Guardate questa risposta stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@SimchaKhabinsky Per me web.config non era abbastanza.
Jean-Bernard Pellerin,

3
Se il web.config non è sufficiente, potrebbe essere necessario aggiungere questa riga prima del <mimeMap>nodo di: <remove fileExtension=".json" />. Non dovresti toccare applicationhost.config (o machine.config). Detto questo, la modifica di tali file può essere utile se si creano frequentemente nuovi siti e non si desidera modificare web.config per ciascun sito. Ciò potrebbe funzionare per gli ambienti di sviluppo, ma spesso non è possibile toccare machine.config negli ambienti di produzione, quindi consiglierei comunque di apportare le modifiche in web.config.
gilly3,

1
Grazie @ gilly3 - la removechiave era per me
harriyott

0
  1. Passare a C: \ Users \ nomeutente \ Documenti \ IISExpress \ config
  2. Apri applicationhost.config con Visual Studio o il tuo editor di testo preferito.
  3. Cerca la parola mimeMap, dovresti trovarne molte.
  4. Aggiungi la seguente riga in cima all'elenco:.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.