ResolveUrl без an ASP.NET страница


Я ищу способ решить относительный url-адрес так, как вы бы со страницей или экземпляром элемента управления ( MSDN Docs), например:

Page.ResolveUrl("~/common/Error.aspx");

...но когда у меня есть только HttpContext, доступный мне, например, когда я нахожусь в HttpHandler.

Мне нужно будет использовать пользовательскую функцию, такую как один видел здесь?

или есть способ добраться до базовой функции, используемой страницей.

3 57

3 ответа:

попробуйте получить страницу из обработчика и использовать ResolveUrl, или создать объект управления...

(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");

или использовать VirtualPathUtility.ToAppRelative(string) или VirtualPathUtility.ToAbsolute(string)

например:

System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");

возвращает

/WebSite/Styles/Contoso.xslt

этот вопрос на SO (ASP.Net: использование системы.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Управление.ResolveUrl () в общей/статической функции) выглядит полезным...В принципе, вы можете использовать VirtualPathUtility класс, который находится под системой.Веб-пространство. Существует дополнительный ответ на этот вопрос, который говорит, чтобы быть осторожным с параметрами QueryString, но решение этого также предусмотрено.

в то же время, код Рика Страла довольно аккуратный!

использовать что-то вроде этого - Элементы управления-это имя папки в приложении, а myController-имя контроллера. чтобы создать и экземпляр и загрузить контроллер, вы можете сделать это:

Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));

надеюсь, что это помогает.