Comment autoriser le téléchargement du fichier .json avec ASP.NET

125

Comment puis-je activer le téléchargement de fichiers * .json à partir d'un ancien site ASP.NET (IIS6, j'en suis persuadé)?

Je reçois une page 404 au lieu du fichier JSON.

Dois-je créer un fichier web.config? Qu'est-ce qu'il y a dedans?

Léa Hayes
la source
1
Vous devrez probablement lui ajouter un type MIME .
vcsjones
1
Pour une utilisation dans un javascript ou pour enregistrer sur un hd?
Remy
Je veux y accéder via jQuery.ajax (url: ...
Lea Hayes
2
En ajoutant qu'une fois que l'IIS local a une liste, lors de votre prochain déploiement, il peut générer une erreur de serveur 500 à partir d'une liste en double, alors mettez-la en commentaire.
Tom Mallard

Réponses:

118

Ajoutez le type JSON MIME à IIS 6. Suivez les instructions de Configuration des types MIME de MSDN (IIS 6.0) .

  • Extension: .json
  • Type MIME: application / json

N'oubliez pas de redémarrer IIS après la modification.

MISE À JOUR: Il existe des moyens simples de le faire sur IIS7 et plus récent. L'op a spécifiquement demandé l'aide d'IIS6, je laisse donc cette réponse telle quelle. Mais cette réponse reçoit toujours beaucoup de trafic même si IIS6 est maintenant très ancien. J'espère que vous utilisez quelque chose de plus récent, donc je voulais mentionner que si vous avez un IIS7 plus récent ou une version plus récente, consultez la réponse de @ ProVega ci-dessous pour une solution plus simple pour ces versions plus récentes.

Jon Adams
la source
1
Bravo mais ceci est sur un pack d'hébergement partagé sans accès à autre chose que web.config ou fichier de code global
Lea Hayes
Si vous n'avez pas accès aux paramètres IIS 6.0 et que la prise en charge de votre fournisseur n'ajoutera pas le type MIME pour vous, vous devrez alors changer de fournisseur, ou vers des serveurs plus récents avec IIS 7.0 sur ce fournisseur s'ils le proposent, pour soutenir cela.
Jon Adams
1
Oui, ASP.Net peut transmettre le fichier via un gestionnaire ASPX ou même une simple page, mais vous ne pourrez pas utiliser le type de fichier .json dans l'URL car il ne transmettra pas cette demande à ASP.Net Durée. Il devra être quelque chose qui passe par le runtime ASPX. Si vous n'avez pas accès aux paramètres IIS, il devra s'agir de l'une des extensions existantes telles que .ASPX. Encore une fois, le passage à un serveur avec IIS7 offre beaucoup plus de solutions plus simples.
Jon Adams
1
Le redémarrage du pool d'applications devrait être suffisant (c'était dans mon cas), plutôt que de redémarrer complètement IIS.
kltft le
1
@kltft Vrai, un redémarrage d'apppool déclenchera la mise à jour, mais uniquement pour ce pool bien sûr. Ces étapes comprennent la modification du paramètre pour tout le monde, et les avoir dans un niveau de paramètres incohérent conduirait facilement à une confusion plus tard. Je recommande de redémarrer l'ensemble du processus iis pour la sécurité et la santé mentale. Mais à la rigueur, si tout le monde accepte les avantages / inconvénients, un redémarrage d'apppool pourrait fonctionner.
Jon Adams le
211

Si vous souhaitez ajouter manuellement le support à votre site, vous pouvez simplement ajouter ce qui suit à votre web.config dans la section system.webServer :

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

Cela ajoutera une configuration "locale" sous IIS. Cela ne fonctionne pas dans IIS6, mais fonctionne dans IIS7 et plus récent.

ProVega
la source
6
Mise à jour de votre réponse pour inclure le web.configchemin complet .
GFoley83
Life saver, merci :)
Gaurav123
1
Pour une raison quelconque, cela a gâché tout mon site - le CSS ne fonctionnait plus!
TheJeff
@TheJeff - cela m'est arrivé, mais c'est parce que j'ai ajouté deux staticContent mimeMap, un pour JSON (nécessaire) et un pour CSV (redondant, j'ai supposé que c'était nécessaire, mais l'applicationConfig IISExpress avait déjà CSV). Par conséquent, j'ai eu cette erreur à chaque fois que j'ai essayé d'accéder à un fichier statique: une Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' fois que j'ai supprimé le doublon, aucun problème.
The Red Pea
1
Cela résoudra le problème lors de l'exécution locale, mais faites attention lorsque vous appuyez sur live. Si mimeMap est déjà configuré globalement dans IIS, vous obtiendrez 500 erreurs. Dans ce cas, supprimez simplement cette pièce de votre web.config.
Evan
20

La solution est que vous devez ajouter un type d'extension de fichier json dans les types MIME

Méthode 1

Accédez à IIS, sélectionnez votre application et recherchez les types MIME

entrez la description de l'image ici

Cliquez sur Ajouter à partir du panneau de droite

Extension de nom de fichier = .json

Type MIME = application / json

entrez la description de l'image ici

Après avoir ajouté le type de fichier .json dans les types MIME , redémarrez IIS et essayez d'accéder au fichier json


Méthode 2

Accédez à web.config de cette application et ajoutez-y ces lignes

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>
Kaushal Khamar
la source
15

Lors de l'ajout de la prise en charge du type mimetype (comme suggéré par @ProVega), il est également recommandé de supprimer le type avant de l'ajouter - ceci afin d'éviter des erreurs inattendues lors du déploiement sur des serveurs où la prise en charge du type existe déjà, par exemple:

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
Mark Cooper
la source
Lorsque vous n'ajoutez que le mimeMap, parfois il supprime vos styles css, donc, la bonne façon est de le supprimer d'abord, merci beaucoup
sgrysoft
Chemin d'accès au fichier de configuration dans le fichier IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO
5

J'ai juste eu ce problème mais j'ai dû trouver la configuration pour IIS Express afin que je puisse ajouter les types mime. Pour moi, il était situé à C:\Users\<username>\Documents\IISExpress\config\applicationhost.configet j'ai pu y ajouter la bonne "carte mime".

Longda
la source
C'est peut-être pourquoi cela ne fonctionne pas pour moi via IIS Express. Malheureusement, ce n'est pas quelque chose que je voudrais avoir à configurer sur chaque machine de développement, il semble donc que je recommande de m'en tenir à l'extension .js pour les fichiers de configuration json.
jpierson
Vous pouvez également le faire dans Web.Config - Regardez cette réponse stackoverflow.com/a/19517275/643761
Simcha Khabinsky
@SimchaKhabinsky Pour moi, web.config ne suffisait pas.
Jean-Bernard Pellerin
3
Si le web.config ne suffit pas, vous devrez peut - être ajouter cette ligne avant le <mimeMap>nœud: <remove fileExtension=".json" />. Vous ne devriez pas avoir à toucher le fichier applicationhost.config (ou machine.config). Cela étant dit, la modification de ces fichiers peut être utile si vous créez fréquemment de nouveaux sites et ne souhaitez pas avoir à modifier le web.config pour chaque site. Cela peut fonctionner pour les environnements de développement, mais souvent vous ne pouvez pas toucher le fichier machine.config dans les environnements de production, donc je recommanderais toujours de faire le changement dans le web.config.
gilly3 du
1
Merci @ gilly3 - removec'était la clé pour moi
harriyott
0
  1. Accédez à C: \ Users \ username \ Documents \ IISExpress \ config
  2. Ouvrez applicationhost.config avec Visual Studio ou votre éditeur de texte préféré.
  3. Cherchez le mot mimeMap, vous devriez en trouver beaucoup.
  4. Ajoutez la ligne suivante en haut de la liste:.
pratik godha
la source