2011-01-05 14 views
9
Uri uri = new Uri(redirectionUrl); 
NameValueCollection col = HttpUtility.ParseQueryString(uri.Query) 

uri.Query ya está decodificado - Entonces, ¿hay alguna manera de prevenir ParseQueryString decodificación de nuevo?HttpUtility.ParseQueryString sin decodificar caracteres especiales

Aparte de eso, ¿hay otro método para recuperar una colección de valores de nombre de un Uri sin modificando los componentes?

Respuesta

6

Encoding the uri.Query antes de pasarlo a ParseQueryString es lo primero que se me ocurre.

ACTUALIZACIÓN

acaba de comprobar el método ParseQueryString con reflector: se supone que la cadena de consulta está codificada y no se puede hacer nada con ella ... Charlatán. Así que creo que es necesario analizarlo manualmente (hay muchos algoritmos listos para usar en la Web).

Alternativamente, podría codificar su cadena de consulta correctamente (teniendo en cuenta nombres de variables y todos los caracteres especiales) antes de pasarla al método ParseQueryString.

- Pavel

+0

No puedo como uri.Query incluye el nombre de la variable y? = –

+0

He actualizado mi respuesta. Espero que esto te ayude a tomar una decisión correcta. – volpav

-3

que han enfrentado el mismo problema. La solución es agregar el segundo parámetro: la codificación. Parece que todo funciona si configuras la codificación UTF8.

NameValueCollection col = HttpUtility.ParseQueryString(uri.Query, Encoding.UTF8) 
+3

La codificación UTF8 se usa de forma predeterminada, por lo que agregarla explícitamente no tiene ningún efecto: http://msdn.microsoft.com/en-us/library/ms150046(v=vs.110).aspx –

+0

Esta opción no tiene cualquier efecto – jitidea

+0

Esto lamentablemente no tiene ningún efecto. Debe codificar su cadena de consulta correctamente antes de pasarla a ParseQueryString. –