2009-04-06 18 views
5

Estoy usando System.Web.Routing para tener algunas URL mejores y me he encontrado con un problema. Necesito saber la página real que está manejando la solicitud.Asp.Net System.Web.Routing Buscar real .aspx Página

por ejemplo, llega una petición como:

/basketball/home 

Tengo que encontrar la página que se encarga de esa petición, como:

/management/default.aspx 

sólo estoy usando el System.Web.Routing y no MVC. Tengo un control para RequestContext que contiene parte de la información de la ruta, pero no veo lo que necesito.

Gracias de antemano.

ACTUALIZACIÓN ******* *******

pude usar Context.CurrentHandler que me dan "ASP.management_default_aspx", no es exactamente la página, pero lo suficientemente para obtener el nombre de la página.

Respuesta

-1

Pude usar Context.CurrentHandler que me dio "ASP.management_default_aspx", no exactamente la página pero suficiente para obtener el nombre de la página.

2

¿No puede recuperar esto del objeto HttpContext actual?

Tal vez algo como esto:

public string GetCurrentPageName() 
{ 
    string sPath = System.Web.HttpContext.Current.Request.Url.AbsolutePath; 
    System.IO.FileInfo oInfo = new System.IO.FileInfo(sPath); 
    string sRet = oInfo.Name; 
    return sRet; 
} 

ACTUALIZACIÓN:
¿Has probado este artículo?

How to: Construct a URL from a Route

Usted debe ser capaz de recuperar de nuevo de la tabla de enrutamiento que haya construido.

+0

Esto no funciona porque System.Web.HttpContext.Current.Request.Url.AbsolutePath me da/basketball/home, que realmente no existe. –

+0

He intentado encontrarlo utilizando la tabla de enrutamiento, pero no hay ningún miembro público o acceso para el controlador. Ese artículo sobre la construcción de una URL de una ruta solo da la URL, que sería '/ basketball/home' y no la página aspx. –

+0

tratando una cosa más descrita en ese artículo. –

3

En realidad, hay otra forma sencilla de obtener la página real:

String vPath = ((System.Web.Routing.PageRouteHandler)Page.RouteData.RouteHandler).VirtualPath
No se olvide de comprobar Page.RouteData.RouteHandler no es nulo - mientras recibe la página w/o ASP.Net enrutamiento pero directamente.

0

Trate de usar este código:

Page.AppRelativeVirtualPath 
+1

¡Esta solución funciona! –

1

vhinn respuesta de terribles trabajado ...

Page.AppRelativeVirtualPath 

Sólo hay que quitar el tilde inicial ("~"), y ya está listo para ir.

var path = Page.AppRelativeVirtualPath.Replace("~", String.Empty); 

No sé por qué fue downvoted. Funcionó para mí como un encanto.

+1

Me gusta esta solución porque funciona incluso en páginas no enrutadas. (probado en webforms asp.net 4.0) –

Cuestiones relacionadas