Asp.Net System.Web.Routing Найти актуальную страницу .aspx - PullRequest
5 голосов
/ 06 апреля 2009

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

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

/basketball/home

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

/management/default.aspx

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

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

******* ОБНОВЛЕНИЕ *******

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

Ответы [ 5 ]

3 голосов
/ 18 июля 2012

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

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

2 голосов
/ 06 апреля 2009

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

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

1 голос
/ 09 января 2015

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

Page.AppRelativeVirtualPath

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

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

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

0 голосов
/ 14 марта 2013

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

Page.AppRelativeVirtualPath
0 голосов
/ 09 декабря 2009

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

...