ResolveUrl без страницы ASP.NET
Я ищу способ разрешения относительного URL-адреса так же, как если бы вы использовали страницу или контрольный экземпляр ( документы MSDN), например:
Page.ResolveUrl("~/common/Error.aspx");
... но когда у меня есть только HttpContext, например, когда я нахожусь в HttpHandler.
Нужно ли использовать пользовательскую функцию, например ту, что была здесь показана?
Или есть способ добраться до базовой функции, используемой Page.
3 ответа
Попробуй получить страницу из обработчика и используй 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
Этот вопрос по SO ( ASP.Net: Использование System.Web.UI.Control.ResolveUrl() в совместно используемой / статической функции) выглядит довольно полезным... По сути, вы можете использовать класс VirtualPathUtility, который находится в System.Web. Пространство имен. На этот вопрос есть дополнительный ответ, в котором говорится, что следует соблюдать осторожность в отношении параметров QueryString, но решение для этого также предусмотрено.
В то же время код Рика Стрэла довольно аккуратный!
Используйте что-то вроде этого - Controls - это имя папки в вашем приложении, а myController - это имя контроллера. чтобы создать и скопировать и загрузить контроллер, вы можете сделать это:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
Надеюсь это поможет.