2011-01-05 41 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方法:它假定查詢字符串編碼,你不能用它做什麼...無賴。所以我認爲你需要手動解析它(網上有很多現成的算法)。

或者,您可以在將它傳遞給ParseQueryString方法之前,正確地編碼查詢字符串(考慮變量名稱和所有特殊字符)。

- Pavel

+0

我不能作爲uri.Query包含變量名和? = – 2011-01-05 14:01:21

+0

我已經更新了我的答案。希望這會幫助你做出正確的決定。 – volpav 2011-01-05 15:22:51

-3

我也遇到了同樣的問題。解決方案是添加第二個參數 - 編碼。如果你設置了UTF8編碼,它會接近一切工作。

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

默認情況下使用UTF8編碼,因此顯式添加它不起任何作用:http://msdn.microsoft.com/en-us/library/ms150046(v=vs.110).aspx – 2014-05-15 05:51:45

+0

此選項沒有任何影響 – jitidea 2015-05-28 08:43:00

+0

這不幸沒有任何影響。在將它傳遞給ParseQueryString之前,您應該正確地對查詢字符串進行編碼。 – 2015-10-11 09:32:27