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

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

60 голосов
/ 04 февраля 2011

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

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

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

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

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

Ответы [ 3 ]

103 голосов
/ 04 февраля 2011

Попробуйте получить страницу из обработчика и используйте 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
17 голосов
/ 04 февраля 2011

Этот вопрос по SO ( ASP.Net: Использование System.Web.UI.Control.ResolveUrl () в общей / статической функции ) выглядит довольно полезным ... По сути, вы можете использовать VirtualPathUtility класс, который находится в пространстве имен System.Web.На этот вопрос есть дополнительный ответ, в котором говорится, что нужно быть осторожным с параметрами QueryString, но также предоставляется решение этого вопроса.

В то же время код Рика Строля довольно аккуратный!

1 голос
/ 27 августа 2013

Используйте что-то вроде этого - Controls - это имя папки в вашем приложении, а myController - это имя контроллера.чтобы создать, создать и загрузить контроллер, вы можете сделать это:

Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));

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

...