Амперсанды в строках запроса URLRewriter - PullRequest
3 голосов
/ 09 февраля 2009

У меня есть значение параметра строки запроса, которое содержит амперсанд. Например, допустимое значение параметра может быть:

a & b

Когда я генерирую URL, который содержит параметр, я использую System.Web.HTTPUtility.UrlEncode (), чтобы сделать каждый элемент URL-дружественным. Это (правильно) дает мне URL-адрес, как:

http://example.com/foo?bar=a+%26b

Проблема в том, что объект Request в ASP.NET интерпретирует (закодированный) амперсанд как разделитель параметров строки запроса и, таким образом, разделяет мое значение на 2 части (первая имеет «bar» в качестве имени параметра; вторая нулевое имя).

Похоже, что ASP.NET сначала декодирует URL, а затем использует его при разборе строки запроса.

Какой лучший способ обойти это?


ОБНОВЛЕНИЕ : проблема связана с URLRewriter (сторонним плагином), а не с самим ASP.NET. Я изменил название, чтобы отразить это, но оставлю остальную часть текста вопроса, как есть, пока не узнаю больше о проблеме.

Ответы [ 4 ]

1 голос
/ 15 марта 2009

человек, я с вами в одной лодке, я потратил много часов, пытаясь выяснить, в чем проблема, и, как вы сказали, это ошибка в обоих случаях, поскольку обычные ссылки, содержащие странные символы или символы кода UTF-8, хорошо разбирается asp.net.

Я думаю, что мы должны перейти на MVC. Маршрутизация

Обновление : человек, которому ты не поверишь, я обнаружил, что проблема настолько странная, что с IIS, попробуйте запустить свою страницу с сервера Visual Studio Dev, и символы Unicode будут проанализированы очень хорошо, но если вы запустите страницу из IIS 7, это даст вам ???? символы.

надеюсь, что здесь какое-то тело затенит свет

1 голос
/ 18 марта 2009

Я бы подумал, что% 26 и '&' означают для веб-сервера одно и то же, поэтому это ожидаемое поведение. Urlencode предназначен для кодирования URL-адресов, а не для кодирования строк запроса.

... держись ... Попробуйте поискать abc & def в Google, вы получите:

http://www.google.com.au/search?q=abc%26def

Итак, ваша строка запроса верна ,% 26 - буквальный амперсанд. Хм, ты прав, звучит как ошибка. Как вы идете с & вместо% 26?

Интересное чтение:

http://www.stylusstudio.com/xsllist/200104/post11060.html

0 голосов
/ 17 августа 2010

Я думаю, что у URLRewriter есть проблема с безымянными параметрами (нулевое имя).
У меня была похожая проблема. Когда я дал своему безымянному параметру (фиктивное) имя, все заработало как положено.

0 голосов
/ 10 февраля 2009

Переключение на UrlRewritingNet.UrlRewrite помог не помочь, так как, по-видимому, имеет ту же ошибку. Я думаю, что это может иметь какое-то отношение к ASP.NET в конце концов.

...