Cómo permitir la descarga del archivo .json con ASP.NET


125

¿Cómo puedo habilitar la descarga de archivos * .json desde un antiguo sitio ASP.NET (IIS6 me hacen creer)?

Recibo una página 404 en lugar del archivo JSON.

¿Necesito crear un archivo web.config? ¿Qué pasa dentro?


1
Probablemente necesite agregarle un tipo MIME .
vcsjones

1
¿Para usar en un javascript o para guardar en un hd?
Remy

Quiero acceder a través de jQuery.ajax (url: ...
Lea Hayes

2
Agregando que después de que el IIS local tenga una lista, en su próxima implementación puede arrojar un error de 500 servidores de una lista duplicada, así que coméntelo.
Tom Mallard

Respuestas:


118

Agregue el tipo JSON MIME a IIS 6. Siga las instrucciones en Configurar tipos MIME de MSDN (IIS 6.0) .

  • Extensión: .json
  • Tipo MIME: aplicación / json

No olvide reiniciar IIS después del cambio.

ACTUALIZACIÓN: Hay formas fáciles de hacer esto en IIS7 y versiones posteriores. La operación solicitó específicamente la ayuda de IIS6, así que dejo esta respuesta tal como está. Pero esta respuesta sigue recibiendo mucho tráfico a pesar de que IIS6 es muy antiguo ahora. Espero que esté usando algo más nuevo, por lo que quería mencionar que si tiene una versión más nueva de IIS7 o más nueva, consulte la respuesta de @ ProVega a continuación para obtener una solución más simple para esas versiones más nuevas.


1
Saludos, pero esto está en un paquete de alojamiento compartido sin acceso a nada que no sea web.config o archivo de código global
Lea Hayes

Si no tiene acceso a la configuración de IIS 6.0, y el soporte de su proveedor no agregará el tipo MIME por usted, entonces tendrá que cambiar de proveedor, o a servidores más nuevos con IIS 7.0 en ese proveedor si lo ofrecen, a Apoya esto.
Jon Adams

1
Sí, ASP.Net puede pasar el archivo a través de un controlador ASPX o incluso una página simple, pero no podrá usar el tipo de archivo .json en la URL, ya que no pasará esa solicitud a ASP.Net tiempo de ejecución Tendrá que ser algo que pase por el tiempo de ejecución ASPX. Si no tiene acceso a la configuración de IIS, tendrá que ser una de las extensiones existentes como .ASPX. Nuevamente, cambiar a un servidor con IIS7 ofrece muchas más y más fáciles soluciones.
Jon Adams

1
Reiniciar el grupo de aplicaciones debería ser suficiente (en mi caso), en lugar de reiniciar IIS por completo.
kltft

1
@kltft True, un reinicio del grupo de aplicaciones activará la actualización, pero solo para ese grupo, por supuesto. Estos pasos incluyen cambiar la configuración para todos, y tenerlos en un nivel inconsistente de configuración fácilmente conduciría a la confusión más adelante. Recomiendo reiniciar todo el proceso de iis por seguridad y cordura. Pero en caso de apuro, si todos están de acuerdo con los pros / contras, un reinicio del grupo de aplicaciones podría funcionar.
Jon Adams

211

Si desea agregar soporte manualmente a su sitio, puede agregar lo siguiente a su web.config en la sección system.webServer :

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

Esto agregará una configuración "local" en IIS. Esto no funciona en IIS6, pero funciona en IIS7 y versiones posteriores.


66
Actualizó su respuesta para incluir la web.configruta completa .
GFoley83

Salvavidas, gracias :)
Gaurav123

1
Por alguna razón, esto arruinó todo mi sitio: ¡css ya no funcionaba!
TheJeff

@TheJeff: eso me sucedió a mí, pero es porque agregué dos staticContent mimeMap, uno para JSON (necesario) y otro para CSV (redundante, supuse que era necesario, pero la aplicación IISExpress applicationConfig ya tenía CSV). Por lo tanto, recibí este error cada vez que intenté acceder a cualquier archivo estático: una Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' vez que eliminé el duplicado, no hay problema.
The Red Pea

1
Esto solucionará el problema cuando se ejecute localmente, pero preste atención al presionar en vivo. Si el mimeMap ya está configurado globalmente en IIS, obtendrá 500 errores. Simplemente elimine esta pieza de su web.config en ese caso.
Evan

20

La solución es que necesita agregar el tipo de extensión de archivo json en Tipos MIME

Método 1

Vaya a IIS, seleccione su aplicación y encuentre tipos MIME

ingrese la descripción de la imagen aquí

Haga clic en Agregar desde el panel derecho

Extensión de nombre de archivo = .json

Tipo MIME = aplicación / json

ingrese la descripción de la imagen aquí

Después de agregar el tipo de archivo .json en Tipos MIME , reinicie IIS e intente acceder al archivo json


Método 2

Vaya a web.config de esa aplicación y agregue estas líneas en ella

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

15

Al agregar soporte para mimetype (como lo sugiere @ProVega), también es una buena práctica eliminar el tipo antes de agregarlo; esto es para evitar errores inesperados al implementar en servidores donde ya existe soporte para el tipo, por ejemplo:

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

Cuando agrega solo el mimeMap, a veces elimina sus estilos CSS, por lo tanto, la forma correcta es eliminarlo primero, muchas gracias
sgrysoft

Ruta al archivo de configuración en el C:\Windows\System32\inetsrv\configarchivo IIS7 : applicationHost.config
OO

5

Acabo de tener este problema, pero tuve que encontrar la configuración para IIS Express para poder agregar los tipos MIME. Para mí, estaba ubicado en C:\Users\<username>\Documents\IISExpress\config\applicationhost.configy pude agregar el "mapa mimo" correcto allí.


Esta puede ser la razón por la que no funciona para mí a través de IIS Express. Desafortunadamente, esto no es algo que me gustaría tener que configurar en cada máquina de desarrollo, por lo que parece que recomendaré seguir con la extensión .js para los archivos de configuración json.
Jpierson

También puedes hacerlo en la Web. Configuración - Mira esta respuesta stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@SimchaKhabinsky Para mí el web.config no fue suficiente.
Jean-Bernard Pellerin

3
Si el web.config no es suficiente, puede que tenga que añadir esta línea antes de que el <mimeMap>nodo: <remove fileExtension=".json" />. No debería tener que tocar applicationhost.config (o machine.config). Dicho esto, modificar esos archivos puede ser útil si crea sitios nuevos con frecuencia y no quiere tener que modificar el web.config para cada sitio. Eso puede funcionar para entornos de desarrollo, pero con frecuencia no puede tocar el machine.config en entornos de producción, por lo que todavía recomendaría realizar el cambio en web.config.
gilly3

1
Gracias @ gilly3 - esa removefue la clave para mí
harriyott

0
  1. Vaya a C: \ Usuarios \ nombre de usuario \ Documentos \ IISExpress \ config
  2. Abra applicationhost.config con Visual Studio o su editor de texto favorito.
  3. Busque la palabra mimeMap, debería encontrar muchos de ellos.
  4. Agregue la siguiente línea al principio de la lista:.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.