Asp.Net System.Web.Routing Найти актуальную страницу .aspx

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

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

/basketball/home

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

/management/default.aspx

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

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

******* ОБНОВИТЬ *******

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


person John Boker    schedule 06.04.2009    source источник


Ответы (5)


На самом деле есть еще один простой способ получить актуальную страницу:

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

person Community    schedule 18.07.2012

Не можете ли вы получить это из текущего объекта 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; 
} 

ОБНОВЛЕНИЕ:
Вы пробовали эту статью?

Как создать URL из маршрута

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

person Chris Ballance    schedule 06.04.2009
comment
Это не работает, потому что System.Web.HttpContext.Current.Request.Url.AbsolutePath дает мне /basketball/home, которого на самом деле не существует. - person John Boker; 06.04.2009
comment
Я попытался найти его с помощью таблицы маршрутизации, но для обработчика нет открытого члена или средства доступа. Эта статья о построении URL-адреса из маршрута дает только URL-адрес, который будет «/basketball/home», а не страницу aspx. - person John Boker; 06.04.2009
comment
попробуйте еще одну вещь, описанную в этой статье. - person John Boker; 06.04.2009
comment
да, метод в этой статье тоже не сработал, нет способа добраться до страницы .aspx, которую я вижу. - person John Boker; 06.04.2009
comment
Возможно, используя отражение, вы могли бы получить текущий класс, который будет отображать 1: 1 в ваш файл aspx. - person Chris Ballance; 06.04.2009

Ответ Винна Грозного сработал...

Page.AppRelativeVirtualPath

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

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

Я не знаю, почему за это проголосовали. Работал для меня как шарм.

person ejcortes    schedule 09.01.2015
comment
Мне нравится это решение, потому что оно работает даже на неперенаправленных страницах. (проверено на веб-формах asp.net 4.0) - person Paco Zarate; 17.04.2015

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

Page.AppRelativeVirtualPath
person Alvin    schedule 14.03.2013

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

person John Boker    schedule 09.12.2009