我不认为整个URL的Uri.EscapeDataString()是在这里使用的正确方法。例如见:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
"https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query"
string escapedUriString = Uri.EscapeUriString(uriString);
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test%20query"
好像EscapeDataString通过逃避一切,包括完全打破了URL“https://开头”前缀,而EscapeUriString刚刚逃脱需要转义什么。
按照documentation你应该“使用EscapeUriString方法来制备转义URI字符串是Uri构造函数的参数。”。个人 - 我一直只是逃脱了我建设Uri的参数,例如,如果参数值包含&符号 - 我可以强制转义它,而不是依靠EscapeUriString知道所有内容。
显然 - “https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query”不是有效的网址。
*编辑
我一定是错过了WP7.0只有一个字符串URL属性现在已经过时的WP7.1和财产确实需要使用转义的EscapeDataString整个URL。我在两个项目类型中都尝试过 - 目标是7.0和7.1,并没有注意到任何挂起。唯一的区别是,7.0会永远铭记我的应用程序,而7.1不会。也许在你的应用程序中有一些其他代码会在您从墓碑中回来时阻止。这里是我的代码:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
var wbt = new WebBrowserTask();
wbt.URL = escapedDataString;
wbt.Show();
另一个想法 - 逃避URI字符串两次 - 第一次使用EscapeUriString呼吁整个地址或调用EscapeDataString只是为参数建立字符串时,然后逃脱再次得到的URI使用EscapeDataString整个。
也许你应该只使用Uri.EscapeUriString而不是Uri.EscapeDataString。你是逃避整个字符串还是只是参数值?您是否验证过您的桌面计算机上打开的URL? –
感谢您的想法,@xyzzer。 WP OS 7.0文档(.chm文件)很清楚,需要使用Uri.EscapeDataString。由于Uri.EscapeUriString对于WebBrowserTask.URL没有成功,所以我在开发过程中认为这是真实的。我正在逃避整个字符串:URL是从其他来源传入的,所以这很容易做到。未转义的URL可在桌面浏览器中正常打开。 –