ResolveUrl без an ASP.NET страница
Я ищу способ решить относительный url-адрес так, как вы бы со страницей или экземпляром элемента управления ( MSDN Docs), например:
Page.ResolveUrl("~/common/Error.aspx");
...но когда у меня есть только HttpContext, доступный мне, например, когда я нахожусь в HttpHandler.
Мне нужно будет использовать пользовательскую функцию, такую как один видел здесь?
или есть способ добраться до базовой функции, используемой страницей.
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"));
надеюсь, что это помогает.