2009-04-06 3 views
5

Я использую System.Web.Routing, чтобы иметь несколько лучших URL-адресов и столкнулся с проблемой. Мне нужно знать фактическую страницу, обрабатывающую запрос.Asp.Net System.Web.Routing Найти актуальную .aspx Страница

, например, запрос приходит как:

/basketball/home 

Мне нужно найти страницу, которая обрабатывает этот запрос, как:

/management/default.aspx 

Я только с помощью System.Web.Routing а не MVC. У меня есть дескриптор RequestContext, который содержит некоторую информацию маршрута, но я не вижу, что мне нужно.

Заранее спасибо.

******* ******* UPDATE

Я был в состоянии использовать Context.CurrentHandler, которые дают мне "ASP.management_default_aspx", точно не страница, но достаточно чтобы получить имя страницы.

ответ

-1

Я смог использовать Context.CurrentHandler, которые дают мне «ASP.management_default_aspx», а не только страницу, но достаточно, чтобы получить название страницы.

2

Не можете ли вы извлечь это из текущего объекта HttpContext?

Возможно, что-то вроде этого:

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

UPDATE:
Пытались ли вы этот товар?

How to: Construct a URL from a Route

Вы должны быть в состоянии получить его обратно из таблицы маршрутизации вы построили.

+0

Это не работает, потому что System.Web.HttpContext.Current.Request.Url.AbsolutePath дает мне/basketball/home, который действительно не существует. –

+0

Я пробовал найти его с помощью таблицы маршрутизации, но для обработчика нет открытого участника или аксессора. Эта статья о построении URL-адреса с маршрута дает только URL-адрес, который будет «/ basketball/home», а не страницей aspx. –

+0

пробовать еще одну вещь, описанную в этой статье. –

3

Существует на самом деле еще один простой способ, чтобы получить реальную страницу:

String vPath = ((System.Web.Routing.PageRouteHandler)Page.RouteData.RouteHandler).VirtualPath
Не забудьте проверить Page.RouteData.RouteHandler не является нулевым - в то время как вы получаете страницу без маршрутизации ASP.Net но напрямую.

0

Попробуйте использовать этот код:

Page.AppRelativeVirtualPath 
+1

Это решение работает !!! –

1

vhinn Грозного ответа работал ...

Page.AppRelativeVirtualPath 

Вы просто должны удалить первоначальные тильды ("~"), и вы готовы к идти.

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

Я не знаю, почему это было опущено. Работал для меня как шарм.

+1

Мне нравится это решение, потому что оно работает даже на страницах, которые не маршрутизируются. (проверено на веб-формах asp.net 4.0) –