ResolveUrl без страницы ASP.NET
Я ищу способ разрешить относительный URL-адрес так, как вам нужно, с помощью экземпляра страницы или элемента управления (Документы MSDN), например:
Page.ResolveUrl("~/common/Error.aspx");
... но когда у меня есть только доступный мне HttpContext, например, когда я нахожусь в HttpHandler.
Нужно ли использовать пользовательскую функцию, например, такую как здесь?
Или есть способ получить базовую функцию, используемую страницей.
Ответы
Ответ 1
Попробуйте получить страницу из обработчика и используйте ResolveUrl
или создайте объект Control...
(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
Или используйте VirtualPathUtility.ToAppRelative(string)
или VirtualPathUtility.ToAbsolute(string)
Например:
System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
возвращает
/WebSite/Styles/Contoso.xslt
Ответ 2
Этот вопрос о SO (ASP.Net: Использование System.Web.UI.Control.ResolveUrl() в общей/статической функции) выглядит как полезный... В принципе, вы можете использовать класс VirtualPathUtility, который находится под пространством имен System.Web. На этот вопрос есть дополнительный ответ, в котором говорится, что нужно соблюдать параметры QueryString, но также предоставляется решение для этого.
В то же время код Rick Strahl довольно опрятен!
Ответ 3
Используйте что-то вроде этого -
Элементы управления - это имя папки в приложении, а myController - имя контроллера. для создания и экземпляра и загрузки контроллера вы можете это сделать:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
Надеюсь, что это поможет.