Подтвердить что ты не робот

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

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

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

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

Нужно ли использовать пользовательскую функцию, например, такую ​​как здесь?

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

4b9b3361

Ответ 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"));

Надеюсь, что это поможет.