HttpUtility.ParseQueryString без декодирования специальных символов

Uri uri = new Uri(redirectionUrl);
NameValueCollection col = HttpUtility.ParseQueryString(uri.Query)

uri.Query уже расшифровано. Могу ли я каким-либо образом предотвратить его повторное декодирование ParseQueryString?

Кроме того, есть ли другой способ получить коллекцию значений имени из Uri без изменения каких-либо компонентов?


person m.edmondson    schedule 05.01.2011    source источник


Ответы (2)


Кодирование uri.Query перед передачей в ParseQueryString — это первое, что приходит мне в голову.

ОБНОВЛЕНИЕ

Только что проверил метод ParseQueryString с помощью Reflector: он предполагает, что строка запроса закодирована, и вы ничего не можете с ней сделать... Облом. Поэтому я думаю, что вам нужно разобрать его вручную (в Интернете есть множество готовых алгоритмов).

В качестве альтернативы вы можете правильно закодировать строку запроса (с учетом имен переменных и всех специальных символов) перед передачей ее методу ParseQueryString.

-- Павел

person volpav    schedule 05.01.2011
comment
Я не могу, так как uri.Query включает имя переменной и? знак равно - person m.edmondson; 05.01.2011
comment
Я обновил свой ответ. Надеюсь, это поможет вам принять правильное решение. - person volpav; 05.01.2011

Я столкнулся с той же проблемой. Решение заключается в добавлении второго параметра — кодировки. Вроде все работает, если поставить кодировку UTF8.

NameValueCollection col = HttpUtility.ParseQueryString(uri.Query, Encoding.UTF8)
person obrys    schedule 05.11.2013
comment
Кодировка UTF8 используется по умолчанию, поэтому ее явное добавление не имеет никакого эффекта: msdn.microsoft.com/en-us/library/ms150046(v=vs.110).aspx - person Igor Brejc; 15.05.2014
comment
Эта опция не имеет никакого эффекта - person jitidea; 28.05.2015
comment
К сожалению, это не имеет никакого эффекта. Вы должны правильно закодировать строку запроса, прежде чем передавать ее в ParseQueryString. - person Sirar Salih; 11.10.2015