Visual Studio es una herramienta sensacional para hacer desarrollo web, y más actualmente gracias a la disponibilidad de la Visual Studio Community Edition, que permite instalar cuantos plug-ins y extensiones queramos, entre ellos Web Essentials.
El caso es que para desarrollar con Visual Studio utilizamos normalmente Internet Information Server Express (IIS Express), que es el núcleo de IIS a nuestra disposición para lanzarlo bajo demanda y servir nuestras webs y aplicaciones.
El problema con IIS es que trae una determinada configuración por defecto que, aunque es válida para la mayor parte de los casos, no nos sirve siempre y hay que aprender a ajustarla.
Uno de estos casos, muy habitual, es no tener configurado un determinado tipo MIME.
Básicamente un tipo MIME define la manera de transmitir un archivo mediante el protocolo HTTP, de modo que en el otro extremo (el navegador) sepa qué tipo de información le viene y cómo procesarla. No es lo mismo recibir un archivo de texto que uno binario, por ejemplo.
Por este motivo hay ciertos archivos que aunque los pongamos en la carpeta de la aplicación y aunque los enlacemos desde una página, el servidor nos responde todo el tiempo que no los encuentra o que no puede servirlos.
Un ejemplo típico es cuando estamos prototipando una aplicación web y queremos simular la disponibilidad de datos mediante archivos de tipo JSON (en lugar de leerlos de un servicio, que aún no existe). En este caso si intentamos descargar mediante AJAX el archivo JSON recibimos todo el tiempo un error 404, como si el archivo no existiera.
Esto ocurre también con muchos otros tipos de archivo (por ejemplo, documentos de Office, aplicaciones Silverlight (.xap), etc... y es debido a que no están definidos sus correspondientes tipos MIME en el servidor.
¿Cómo lo solucionamos?
Lo único que tenemos que hacer es, claro está, es añadir el tipo MIME correspondiente a IIS Express. para ello debemos tocar su configuración, pero IIS Express no ofrece ninguna interfaz de usuario para poder configurarlo así que debemos tocar manualmente ciertos archivos.
Toda la configuración de IIS se hace mediante archivos .config, los cuales pueden afectar solamente a la aplicación actual (o incluso a partes de ella exclusivamente) o al servidor completo para todas las aplicaciones.
En el caso de querer arreglar el problema solo para nuestra aplicación, lo único que tenemos que hacer es abrir el archivo web.config de la misma (si no existe, lo creas), e incluir las siguientes líneas, destacadas en la figura:
Lo copio aquí en formato texto para facilitarte su uso:
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>
De este modo añadimos el tipo MIME de la extensión .json al servidor. Ahora al volver a ejecutar la aplicación web veremos que ya descarga perfectamente los archivos de este tipo y no nos vuelve a dar problemas.
Si quieres que el tipo ya está disponible siempre, para todas las aplicaciones, sin tener que acordarte de configurarlo de cada vez, puedes añadir este ajuste a la configuración global de IIS Express, la cual puedes encontrarla en la ruta:
%userprofile%\documents\IISexpress\config
O yendo directamente a través de "Libraries" ("Bibliotecas, creo, en español) en la barra lateral del explorador de archivos:
El archivo que nos interesa es el resaltado en la figura anterior: applicationhost.config.
Lo puedes arrastrar sobre Visual Studio o abrirlo con cualquier editor de texto. Busca la palabra "<staticContent" (con el mayor delante, para que te salga un nodo), y verás que aparecen todos los tipos MIME que trae el servidor por defecto:
Le puedes añadir el que te interese del mismo modo que antes:
Yo procuro ponerlos en el orden que le corresponde, alfabéticamente como vienen por defecto, ya que así luego es fácil encontrarlos, pero puedes ponerlo donde quieras dentro de esa sección.
¡Listo! A partir de ese momento ya tienes el tipo o tipos que te faltaban y las descargas de los mismos funcionarán bien desde IIS Express.
¡Espero que te sea útil!