2008-08-27 23 views
10

Me gustaría ignorar varias rutas comodín. Con asp.net mvc vista previa 4, que se entregan con:Asp.Net Routing: ¿Cómo ignoro múltiples rutas comodín?

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

También me gustaría añadir algo como:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}"); 

pero que parece romper algunos de los ayudantes que generan direcciones URL en mi programa. ¿Pensamientos?

Respuesta

13

Aquí hay dos soluciones posibles.

  1. Agregue una restricción a la ruta de ignorar para asegurarse de que solo las solicitudes que se deben ignorar coincidan con esa ruta. Un poco kludgy, pero debería funcionar.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"}); 
    
  2. ¿Qué hay en su directorio de contenido? De forma predeterminada, el enrutamiento no enruta los archivos que existen en el disco (en realidad comprueba el VirtualPathProvider). Entonces, si está poniendo contenido estático en el directorio de contenido, es posible que no necesite la ruta de ignorar.

5

Esto puede ser bastante complicado.

Cuando intentamos averiguar cómo mapear datos de ruta en una ruta, el sistema actualmente busca de arriba hacia abajo hasta que encuentra algo donde se proporciona toda la información requerida y luego coloca todo lo demás en parámetros de consulta.

Dado que la información requerida para la ruta "Contenido/{* pathInfo}" está totalmente satisfecha siempre (no se requieren datos en esta ruta), y está cerca de la parte superior de la lista de rutas, todos los intentos de mapeo a las rutas sin nombre coincidirá con este patrón, y todas sus URL se basarán en esto ("Content? action = foo & controller = bar")

Desafortunadamente, no hay forma de evitar esto con las rutas de acción. Si usa rutas con nombre (es decir, seleccionando Html.RouteLink en lugar de Html.ActionLink), puede especificar el nombre de la ruta para que coincida. Es menos conveniente, pero más preciso.

IMO, las rutas complejas hacen que el sistema de enrutamiento de acción básicamente se caiga. En las aplicaciones en las que tengo algo más que las rutas predeterminadas, casi siempre termino volviendo a la generación de URL basada en ruta con nombre para asegurar que siempre obtengo la ruta correcta.