2009-02-09 6 views
3

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

a & b 

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

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

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

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

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


UPDATE: Проблема зависит от URLRewriter (стороннего плагина), а не сам ASP.NET. Я изменил название, чтобы отразить это, но оставлю оставшийся текст вопроса до тех пор, пока не узнаю больше о проблеме.

+0

Hi. Вы нашли решение для этого? – gimalay

+0

Нет, хотя я не смотрел в последнее время. –

ответ

0

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

1

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

я думаю, что мы должны перейти на MVC.routing

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

надежда некоторые тело тень какой-то свет здесь

1

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

... повесить на ... Поищите а & опра в Google, вы получите:

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

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

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

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

0

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