2010-04-21 8 views
6

Si tengo una solicitud de un recurso en mi ASP.NET MVC1 (o 2) aplicación web para un recurso estático, por ejemplo ... un imagen o un archivo javascript o un archivo css ... ¿el .NET Framework intenta ver si la solicitud coincide con la lista de rutas ... y finalmente no puede encontrar un controlador para ello?enrutamiento ASP.NET MVC y datos estáticos (es decir, imágenes, scripts, etc.)

por ejemplo.

de recursos: /Content/Images/Foo.png

¿Tiene esta solicitud, ve a través de mi lista de rutas .. no coincide con ningún controladores/acciones a esta solicitud y luego tratar ese camino directamente?

Respuesta

7

Puede elegir si desea asignar un archivo existente o no establecer la propiedad RouteCollection.RouteExistingFiles

Obtiene o establece un valor que indica si ASP.NET enrutamiento debe manejar URL que coinciden con un archivo existente.

Esto es lo que he leído de here:

Sin embargo, el sistema de enrutamiento todavía lo hace comprobar el sistema de archivos para ver si un dirección URL entrante pasa a coincidir con un archivo o disco, y si es así, el enrutamiento ignora la solicitud (omitiendo las entradas de ruta que la URL también puede coincidir) para que el archivo se sirva directamente. Esto es muy conveniente para archivos estáticos, como imágenes, CSS y archivos de JavaScript. Puede mantenerlos en su proyecto (por ejemplo, en su/Contenido o carpetas/Script), y luego referencia y servirlos directamente, como si no estuviera utilizando el enrutamiento en absoluto. Dado que el archivo existe genuinamente en el disco, eso tiene prioridad sobre su configuración de enrutamiento.

Si, por el contrario, desea que su configuración de enrutamiento tenga prioridad sobre los archivos en disco, puede establecer la propiedad RouteExistingFiles de RouteCollection en true. (Es falso por defecto.)

+0

así que lo que dices es que, primero intenta encontrar el archivo en el disco (por ejemplo, foo.png, something.js, some.ico, lo que sea). Si no puede hacer eso, entonces activa el sistema de enrutamiento. Entonces, cuando ingresa a mi propia IControllerFactory (por ejemplo), se supone que el recurso no existe físicamente en el disco. Por último, esto es para el conjunto de configuración predeterminado (es decir, RouteExistingFiles = false). –

+0

Sí, eso es correcto –

0

También puede hacer un pequeño truco en IIS. Guardo mi js, images, css, etc. en la carpeta de contenido debajo del directorio virtual.

Si a continuación, visualiza las propiedades (en el administrador de IIS) de la carpeta de contenido, créela como un directorio virtual y luego elimine la asignación de comodines. A continuación, establezca la carpeta de contenido en un directorio normal. Esto debería entonces detener las solicitudes a estos archivos manejadas por el manejador aspnet_isapi.

1

De forma predeterminada, el motor de enrutamiento ignorará los mapas de ruta para todos los archivos que existen físicamente en el servidor. En resumen, no necesita hacer nada para que una aplicación MVC se vincule a archivos estáticos.

Cuestiones relacionadas