2009-02-22 17 views
22

¿La carpeta de contenido es especial para el marco subyacente de MVC? No puedo encontrar ninguna referencia en el código o configuración de enrutamiento.¿La carpeta de contenido es sagrada en asp.net mvc?

Me pregunto si el contenido estático se puede manejar de diferentes maneras.

En una nota relacionada, el contenido de la escritura y CSS de stackoverflow parece ser recuperada por número de versión en la cadena de consulta:

<link href="/Content/all.min.css?v=2516" rel="stylesheet" type="text/css" /> 

Atención a especular cómo podría funcionar esto y por qué esto sería importante?

+0

@BC, hice la misma pregunta porque tenía curiosidad también. Acerca de los archivos CSS que es. Visite: http://stackoverflow.com/questions/502600/versioning-css-files-with-a-query-string-like-stackoverflow-does – mmcdole

Respuesta

18

No es mágico, la clase System.Web.Routing.RouteCollection tiene una propiedad RouteExistingFiles que controla el comportamiento.

El valor predeterminado es falso, lo que significa que el enrutamiento ASP no debe enrutar la URL, solo devuelve el contenido predeterminado. En este caso, "/Content/all.min.css?v=251" omite por completo las reglas de enrutamiento MVC.

si desea agregar una regla de enrutamiento para la carpeta de contenido, debe agregar la regla y establecer RouteExistingFiles en verdadero.

4

Uso la misma técnica en algunos de mis sitios. Lo uso para evitar el almacenamiento en caché: si no especifica una URL diferente para las diferentes compilaciones, es posible que los clientes hayan guardado en caché la anterior.

+0

Buena observación, sé que debe ser el razonamiento. –

+2

Yo uso mysite.css? V = xx todo el tiempo - un gran dolor en el culo si no le digo a tu cliente que borre su caché o cambio de actualización – Slee

+0

Es el razonamiento, Jeff Atwood incluso lo dijo durante un podcast de SO. –

1

No tiene ningún significado especial. Es solo un nombre de arbitraje. Si se utiliza el asistente de ASP.NET MVC RC se encuentra que se hace referencia dentro de su página maestra (Site.Master):

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

En cuanto a all.min.css utilizado en SO, que podría ser una controlador personalizado que se ejecuta en el servidor para recuperar una hoja de estilos comprimida por versión.

+0

Entonces, ¿está diciendo que el manejador de enrutamiento primero busca los nombres de las carpetas físicas reales antes de elegir un controlador para enrutar? Mis pruebas parecen indicar que puede ser lo que está sucediendo. –

5

No, la carpeta de contenido no es sagrada. Úselo como lo desee.

Vuelva a la versión: este es un truco común para ayudar con las versiones si tiene habilitado el caché basado en el encabezado http; de lo contrario, no puede garantizar que todos los clientes estén usando los archivos actualizados. Usted verá un montón de "foo_v4.js", etc en la web ;-P

+0

Hola.Tengo una [pregunta en SO] (http://stackoverflow.com/questions/30273517/best-practice-for-persisting-user-state-in-special-kind-of-asp-net-mvc-applicati). ¿Podrían por favor ayudarme, ya que es muy urgente? Y realmente seré útil para tu ayuda. –

3

Sólo para añadir a los otros comentarios acerca de esto - la forma en que funciona el sistema de enrutamiento es el siguiente:

llega una solicitud in, y se dirige al motor de enrutamiento, que luego busca en la tabla de rutas una coincidencia, en el orden en que están registradas (razón por la cual debe colocar rutas más específicas antes de las rutas más generales).

Si no se encuentra ninguna coincidencia, el motor de enrutamiento pasa la solicitud a IIS para que la maneje normalmente: esta es también la forma de entremezclar formularios web ASP.NET y MVC en la misma aplicación.

+0

¿Pero el contenido/consultas no coincidiría con mi ruta predeterminada? –

+2

No, porque no tiene un controlador llamado ContentController para que coincida. –

Cuestiones relacionadas