2009-06-10 36 views
42

Al usar el enrutamiento ASP.Net, ¿cómo se puede obtener el RouteData del código subyacente?¿Cómo se puede acceder a RouteData desde el código subyacente?

Sé que puede obtenerlo del método GetHttpHander de RouteHandler (se le entrega el RequestContext), pero ¿puede obtenerlo del código subyacente?

¿Hay algo como ...

RequestContext.Current.RouteData.Values["whatever"]; 

... que se puede acceder en todo el mundo, como se puede ver con HttpContext?

¿O es que solo se debe acceder a RouteData desde el RouteHandler?

+0

para crear una URL como Url.RouteUrl, se puede utilizar el GetRouteUrl-Método en el código detrás del archivo (Sé que esta no es una respuesta a su pregunta, pero cuando busco este problema siempre encuentro su pregunta. Así que tal vez ayude a alguien. :-) –

Respuesta

31

Usted puede utilizar el siguiente:

RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current)); 
+8

Tenga en cuenta que está haciendo una llamada al enrutamiento de nuevo de nuevo y esto es como N número de solicitudes que llegan a su tabla de rutas. –

0

Creo que necesita crear un RouteHandler, entonces puede insertar los valores en HTTPContext durante el evento GetHttpHandler.

foreach (var urlParm in requestContext.RouteData.Values) { 
    requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value; 
} 

Puede encontrar más información en this MSDN article.

139

También puede utilizar el siguiente:

//using System.Web; 
HttpContext.Current.Request.RequestContext.RouteData 
+12

Esta es la forma mucho más eficaz de hacerlo. –

+0

Spot en @HosamAly – Korayem

+0

Esto no funciona con RenderAction – bendytree

Cuestiones relacionadas