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"));

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

Другие вопросы по тегам