Строка запроса с амперсандом и преждевременным декодированием в Request.Url - PullRequest
2 голосов
/ 21 октября 2010

При заданном URL-адресе /Page.aspx?a=b&title=apples+%26+pears, свойство Request.Url возвращает /Page.aspx?a=b&title=apples+&+pears

Обратите внимание, что кодированный в URL-адресе амперсанд во второй паре ключ-значение был автоматически декодирован.Другие зарезервированные символы в кодировке URL не декодируются автоматически.

Правильно ли это поведение?

РЕДАКТИРОВАТЬ: Проблема заключается в том, что свойство Request.Url автоматически декодируетзакодированный амперсанд, когда я этого не ожидаю.

ОТВЕТ: string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Sitecore.Context.Request.RawUrl)

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Url свойство Request декодируется во внутреннем методе CollapsePercentUFromStringInternal.

Вы можете увидеть это в отражателе. Я предположил, что это поведение по умолчанию в любом случае.

Обновление

Вы можете использовать свойство RawUrl, чтобы получить не декодированный URL.

2 голосов
/ 21 октября 2010

Зарезервированные символы URL-адреса используют некоторые символы для специального использования при определении их синтаксиса.Когда эти символы не используются в их специальной роли в URL-адресе, их необходимо закодировать.

 Dollar          ("$")
 Ampersand       ("&")
 Plus            ("+")
 Comma           (",")
 Forward slash   ("/")
 Colon           (":")
 Semi-colon      (";")
 Equals          ("=")
 Question mark   ("?")
 'At' symbol     ("@")

Символы небезопасного использования

Некоторые символы могут бытьнеправильно понято в URL по разным причинам.Эти символы также всегда должны быть закодированы.

Символ процента ("%")

Символ фунта ("#")

Символ меньше чем ("<") Символ "больше чем" (">") Пробел

Таким образом, поведение кодирования URL правильное.

...