2010-07-01 13 views
22

estoy tratando con este código en un escenario de formularios web:¿Alguien me puede explicar la sintaxis de enrutamiento asp.net?

public static void RegisterRoutes(RouteCollection routes) 
    { 

    Route r = new Route("{*url}", new MyRouteHandler()); 
    routes.Add(r); 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("{resource}.gif/{*pathInfo}"); 

    } 

En primer lugar, puede alguien decirme donde el defintion {*} Pathinfo es? http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns realmente no lo define. Hace:

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

Partido

Mientras

routes.IgnoreRoute("{resource}.axd"); 

partidos Sólo

/xyz.axd 

En segundo lugar, en:

{*url} 

¿Qué significa *? Y qué significa la expresión como un todo. ¿Hay algún lugar que esto se explique claramente?

En tercer lugar, ¿hay algún orden en particular que necesite agregar estas expresiones para ignorar correctamente las rutas? Sé {* url} es una especie de cajón de sastre, si los IgnoreRoutes venir antes o después de que por ejemplo

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.IgnoreRoute("{resource}.gif/{*pathInfo}"); 
Route r = new Route("{*url}", new MyRouteHandler()); 
routes.Add(r); 

Respuesta

2

pathinfo es sólo una etiqueta para un cubo. Entonces, por ejemplo, * pathinfo dice poner todo después de {resource} .axd/en pathinfo.

Las rutas se están ejecutando en el orden en que las coloca en la tabla de rutas, por lo que si su primera ruta es una captura, el resto nunca se ejecutará.

+0

¿Es correcto mi ejemplo de pathInfo? Si no, puede rehacerlo para que sea correcto. Todavía estoy confundido. – Petras

+0

Sus ejemplos se ven bien, tal vez podría publicar una ruta que no funciona, entonces puedo comentar sobre eso. – bleevo

21

Mis 2 centavos: Una ruta no es regex. Se trata simplemente de componentes variables y estáticos que forman una ruta, separados por segmentos (identificados por una barra inclinada). Hay un símbolo especial, el asterisco en la última variable, lo que significa de aquí en adelante, ignorar el separador de segmentos: la barra inclinada. Así,

{*url} 

es la ruta más sencilla, ya que significa tomar la dirección URL completa, lo puso en la 'url' variable y pasar a que la página asociada a esa ruta.

{controller}/{action}/{id} 

pone todo en el primer segmento - hasta la primera barra - en el 'controlador' variable, pone todo entre el primer y segundo/en la variable 'acción', y todo lo que entre el segundo y tercera barra inclinada (o el final) en la variable 'id'. esas variables luego pasan a la página asociada.

{resource}.axd/{*pathInfo} 

aquí, poner la información antes .axd/(y puede no tener barras!) En 'recurso', y poner todo después del primer/a 'Pathinfo'. Dado que esto es típicamente un ignoreRoute, entonces en lugar de pasarlo a la página asociada, es manejado por el StopHandler, lo que significa que el enrutamiento no se ocupará de él, y en su lugar es manejado por el HttpHandler que no enruta.

Como dice bleevo, las rutas se ejecutan para que se agreguen a la colección. por lo tanto, deben agregarse IgnoreRoute antes de manejar la ruta genérica.

Aquí está la boca del caballo: http://msdn.microsoft.com/en-us/library/cc668201.aspx

específica de su ejemplo, me gustaría poner las líneas IgnoreRoute por encima de su ruta Además, debido a que su ruta es efectivamente un cajón de sastre. Además, recuerde que el .gif ignorar solo se cumplirá si el gif está en el directorio raíz.

Cuestiones relacionadas