Control.ResolveUrl против Control.ResolveClientUrl против VirtualPathUtility.ToAbsolute
Есть ли какое-либо преимущество в использовании одного из этих методов над другим при разрешении путей, начинающихся с тильды (~)?
Как правило, что лучше, если вы отправляете относительные пути или абсолютные пути вниз в свой html?
Ответы
Ответ 1
Разница между ResolveUrl и ResolveClientUrl заключается в том, что ResolveClientUrl возвращает путь относительно текущей страницы, ResolveUrl возвращает путь относительно корня сайта:
http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx
Я бы рекомендовал использовать абсолютные пути.
Изменить: Рик Страйл опубликовал хорошую статью об этом
Edit2: удалено бит о кешировании. Не добавляет ответа и может не обязательно быть точным.
http://west-wind.com/weblog/posts/132081.aspx
Ответ 2
Вот еще одна статья, объясняющая разницу между различными способами решения путей в ASP.NET -
Различные подходы к разрешению URL-адресов в ASP.NET
Ответ 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