C#URL QueryString麻烦

时间:2012-01-02 21:54:41

标签: c# .net windows-phone-7 query-string

我有一个WP7项目,我正在使用下面的代码。它通常工作正常,但我得到一个奇怪的结果,一些特定的字符串被传递。

Service = "3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f"

NavigationService.Navigate(new Uri("/Details.xaml?service=" + Service, UriKind.Relative));

下一页:

NavigationContext.QueryString.TryGetValue("service", out Service1);

Service1 now = 3q #L3t41tGfXQDTaZMbn#w ==?f

为什么要更改字符串?

3 个答案:

答案 0 :(得分:2)

在您的第一个代码段中,字符串是URL编码。

在第二个代码段中,字符串是URL Decoded。

它们本质上是相同的字符串,只是应用/删除了编码。

例如:urlencoding #获得%23

如需进一步阅读,请查看此wikipedia article on encoding

由于HttpUtility不是WP7 Silverlight堆栈的一部分,我建议使用Uri.EscapeUriString来转义任何尚未转义的URI。

答案 1 :(得分:2)

如果你希望它能够通过未受损害的传递,你应该对字符串进行URL编码。

答案 2 :(得分:2)

字符串没有改变,但你以两种不同的方式看待它。

3q#L3t41tGfXQDTaZMbn#w==?f编码为URI内容的方式为3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f。 (实际上,它是3q%23L3t41tGfXQDTaZMbn%23w%3D%3D%3Ff,但是在这种情况下,你在接近末尾的?没有被正确地转义为%3F。)

您编写字符串的方式,希望能够将其转义。

你读取字符串的方法,将其返回未转义。

事情真的非常完美。

当你需要再次写字符串时,再次将其转义:

Service = Uri.EscapeDataString(Service1);