2009-04-06 8 views
5

J'utilise System.Web.Routing pour avoir de meilleures URL et j'ai rencontré un problème. J'ai besoin de connaître la page réelle qui gère la demande.Asp.Net System.Web.Routing Trouver .aspx réel Page

par exemple une requête arrive comme:

/basketball/home 

Je dois trouver la page qui gère cette demande, comme:

/management/default.aspx 

Je suis seulement en utilisant la System.Web.Routing et pas MVC. J'ai un handle sur le RequestContext qui contient certaines des informations d'itinéraire, mais je ne vois pas ce dont j'ai besoin.

Merci d'avance.

MISE À JOUR ******* *******

J'ai pu utiliser Context.CurrentHandler qui me donne "ASP.management_default_aspx", pas exactement la page mais assez pour obtenir le nom de la page. Ne pouvez-vous pas récupérer ceci à partir de l'objet HttpContext actuel?

Répondre

-1

J'ai été capable d'utiliser Context.CurrentHandler qui me donne "ASP.management_default_aspx", pas exactement la page mais assez pour obtenir le nom de la page.

2

Peut-être quelque chose comme ceci:

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; 
} 

MISE À JOUR:
Avez-vous essayé cet article?

How to: Construct a URL from a Route

Vous devriez pouvoir le récupérer en arrière à partir de la table de routage que vous avez construit.

+0

Cela ne fonctionne pas car System.Web.HttpContext.Current.Request.Url.AbsolutePath me donne/basketball/home, qui n'existe pas vraiment. –

+0

J'ai essayé de le trouver en utilisant la table de routage, mais il n'y a pas de membre public ou d'accesseur pour le gestionnaire. Cet article sur la construction d'une URL à partir d'une route ne donne que l'URL, qui serait '/ basketball/home' et non pas la page aspx. –

+0

en essayant une chose de plus décrite dans cet article. –

3

Il est en fait une autre façon simple d'obtenir la page réelle:

String vPath = ((System.Web.Routing.PageRouteHandler)Page.RouteData.RouteHandler).VirtualPath
Ne pas oublier de vérifier Page.RouteData.RouteHandler est non nulle - tandis que vous obtenez la page w/o routage ASP.Net mais directement.

0

Essayez d'utiliser ce code:

Page.AppRelativeVirtualPath 
+1

Cette solution fonctionne !!! –

1

vhinn réponse Terrible ... travaillé

Page.AppRelativeVirtualPath 

Il vous suffit de retirer le tilde initial ("~"), et vous êtes prêt à aller.

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

Je ne sais pas pourquoi il a été downvoted. A travaillé pour moi comme un charme.

+1

J'aime cette solution car elle fonctionne même dans les pages non routées. (testé sur webforms asp.net 4.0) –

Questions connexes