2011-01-05 44 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