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

uri.Query bereits dekodiert wird - so ist es eine Möglichkeit, ParseQueryString es wieder Decodierung verhindern kann?HttpUtility.ParseQueryString ohne Sonderzeichen Decodierung

Abgesehen davon - gibt es eine andere Methode, um eine Namenswert-Sammlung von einem Uri ohne zu erhalten, um irgendwelche Komponenten zu modifizieren?

Antwort

6

Codierung der vor der Übergabe an ParseQueryString ist das erste, was mir zu Kopf steigt.

UPDATE

geprüft einfach die ParseQueryString Methode mit Reflektor: es wird davon ausgegangen, dass der Query-String codiert wird, und Sie können nicht mit ihm ... Bummer alles tun. Ich denke, Sie müssen es manuell analysieren (es gibt viele fertige Algorithmen im Web).

Alternativ können Sie Ihren Query-String (unter Berücksichtigung von Variablennamen und Sonderzeichen) korrekt codieren, bevor Sie ihn an die Methode ParseQueryString übergeben.

- Pavel

+0

Ich kann nicht wie uri.Query enthält den Variablennamen und? = –

+0

Ich habe meine Antwort aktualisiert. Hoffe, das wird dir helfen, eine richtige Entscheidung zu treffen. – volpav

-3

Ich habe das gleiche Problem. Die Lösung fügt den zweiten Parameter hinzu - die Kodierung. Es scheint, dass alles funktioniert, wenn Sie die UTF8-Kodierung einstellen.

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

Die UTF8-Kodierung wird standardmäßig verwendet, daher hat das explizite Hinzufügen keine Auswirkung: http://msdn.microsoft.com/en-us/library/ms150046(v=vs.110).aspx –

+0

Diese Option ist nicht verfügbar jeder Effekt – jitidea

+0

Dies hat leider keine Wirkung. Sie sollten Ihre Abfragezeichenfolge ordnungsgemäß codieren, bevor Sie sie an ParseQueryString übergeben. –