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

uri.Queryをデコードせずには既に復号化された - 私はParseQueryStringは再びそれをデコード防ぐことができます任意の方法はありますか?HttpUtility.ParseQueryString特殊文字

それ以外にも、Uri から名前の値のコレクションを取得する別の方法があります。のコンポーネントを変更しないでください。

答えて

6

ParseQueryStringに渡す前にuri.Queryを符号化することが、私の頭に来る最初のことです。

UPDATE

ただリフレクターとParseQueryString方法を確認:それは、クエリ文字列がエンコードされていることを前提としていて、あなたはそれで何もできない...がっかりします。だからあなたは手動で解析する必要があると思います(Web上にはすぐに使えるアルゴリズムがたくさんあります)。

また、ParseQueryStringメソッドに渡す前に、クエリ文字列を適切に(変数名とすべての特殊文字を考慮して)エンコードすることができます。

- パベル

+0

uri.Queryには変数名が含まれていますか? = –

+0

私は自分の答えを更新しました。これが正しい判断を下すのに役立つことを願っています。 – volpav

-3

私は同じ問題に直面しています。解決策は、2番目のパラメータ、つまりエンコーディングを追加することです。 UTF8エンコーディングを設定すると、すべてが機能することになります。

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

UTF8エンコードがデフォルトで使用されているため、明示的に追加しても効果はありません。http://msdn.microsoft.com/en-us/library/ms150046(v=vs.110).aspx –

+0

このオプションには、任意の効果 – jitidea

+0

これは残念ながら何の効果もありません。 ParseQueryStringに渡す前に、クエリ文字列を適切にエンコードする必要があります。 –