rutas routeconfig route net enrutamiento asp asp.net asp.net-mvc routing

asp.net - routeconfig - rutas en asp net



Asp.Net Routing: ¿Cómo ignoro múltiples rutas comodín? (2)

Esto puede ser bastante complicado.

Al intentar descubrir 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.

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

Lamentablemente, no hay forma de evitar esto con las rutas de acción. Si usa rutas con nombre (fe, 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.

OMI, 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.

Me gustaría ignorar varias rutas comodín. Con asp.net mvc preview 4, se envían con:

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

También me gustaría agregar algo como:

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

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


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 tu 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.