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

Control.ResolveUrl против Control.ResolveClientUrl против VirtualPathUtility.ToAbsolute

Есть ли какое-либо преимущество в использовании одного из этих методов над другим при разрешении путей, начинающихся с тильды (~)?

Как правило, что лучше, если вы отправляете относительные пути или абсолютные пути вниз в свой html?

4b9b3361

Ответ 1

Разница между ResolveUrl и ResolveClientUrl заключается в том, что ResolveClientUrl возвращает путь относительно текущей страницы, ResolveUrl возвращает путь относительно корня сайта:

http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx

Я бы рекомендовал использовать абсолютные пути.

Изменить: Рик Страйл опубликовал хорошую статью об этом

Edit2: удалено бит о кешировании. Не добавляет ответа и может не обязательно быть точным.

http://west-wind.com/weblog/posts/132081.aspx

Ответ 3

Обратите внимание, что VirtualPathUtility.ToAbsolute(virtualPath) генерирует исключение, если строка запроса включена в путь.

Сообщение HttpException будет по очереди "~/YourVirtualPath/YourPage.aspx? YourQueryStringArg = FooBar" не является допустимым виртуальным путем.

См. Rick Strahl Web Log: ResolveUrl() без страницы и MSDN: VirtualPathUtility.ToAbsolute Method (String)

Ответ 4

Еще одно отличие, которое я заметил:

Код:

string value = "~/Docs/Hello & World.aspx"; Response.Write(HyperLink1.ResolveClientUrl(value) + "<br/>"); Response.Write(HyperLink1.ResolveUrl(value) + "<br/>");

Результат:

Документы/Привет %20 & %20World.aspx

/Docs/Hello и World.aspx