Windows Phone 7 WebBrowserTask问题

5
我正在尝试使用WP7中的WebBrowserTask打开此URL,但它无法工作(我在我们网站上得到了一个自定义错误),但是当我手动输入时,它可以正常工作。有什么想法吗?
它在Google Chrome和IE7中也完全正常工作。
这是URL:

http://www.symfonee.com/Improv/addison/comedians/Bio.aspx?ShowDate=12/15/10&ShowTime=8:00p&Uid=54918a0d-1beb-4552-bdc8-2d474e3ea5ae

这是我的代码:

string url = "http://www.symfonee.com/Improv/addison/comedians/Bio.aspx?ShowDate=12/15/10&ShowTime=8:00p&Uid=54918a0d-1beb-4552-bdc8-2d474e3ea5ae";

WebBrowserTask browser = new WebBrowserTask();
browser.URL = url;
browser.Show();

谢谢!
编辑:
没有下面的任何解决方案,这段代码也能正常工作:
WebBrowserTask browser = new WebBrowserTask();
browser.URL = "http://www.youtube.com/results?search_query=Windows+Phone+7&aq=f";
browser.Show();

我不明白有什么不同?


一个很大的区别是你的URL在查询字符串中有未转义的字符,而YouTube的URL没有。 - Josh
4个回答

5

SDK 存在一个bug。在包含 & 的URL中,您需要对其进行转义。

例如:

... Uri.EscapeDataString("&") + "ShowTime=8:00p"


3
这很可能是因为您的查询字符串参数未进行URL编码。现代Web浏览器会尝试在您将其粘贴到地址栏中时进行补偿,因为在您的头脑中进行URL编码很困难。但是,当您使用API时,您应该自己对这些部分进行URL编码。

使用Uri.EscapeDataString方法单独对查询字符串的每个部分进行编码。例如:

string url = "http://www.symfonee.com/Improv/addison/comedians/Bio.aspx" +
    "?ShowDate=" + Uri.EscapeDataString("12/15/10") +
    "&ShowTime=" + Uri.EscapeDataString("8:00p") +
    "&Uid=" + Uri.EscapeDataString("54918a0d-1beb-4552-bdc8-2d474e3ea5ae");

你可以对整个URL进行URL编码 - 我已经这样做了,它可以正常工作,如果这种方法不起作用,你可以尝试另一种方法。 - RoguePlanetoid
在这种特殊情况下,这样做可能是可以的,但我觉得上述方法更加简洁,特别是在不处理常量值的情况下,这可能是任何现实世界代码的情况。例如,如果其中一个值包含 & 或 ?,那么对整个 URL 进行 URL 编码将无法按预期工作。 - Josh
我仍然认为这与您的URL包含未转义字符有关。您可以尝试运行Fiddler,查看在浏览器中输入URL时发送到Web服务器的内容与您的应用程序发送的内容有何不同。 - Josh
你是对的,我发现问题出在&符号上,但我还没有找到一个好的转义方法。当Uri发现&符号时,它不会发送后面的任何内容,所以我最终得到了一个被截断的URL。 - Carlo
实际上我已经这么做了。它就是EscapeDataString,但我必须包含&符号,我按照你的例子没有包含&符号,所以它没有起作用=P。请纠正一下以接受你的答案。谢谢=) - Carlo

1

以下代码对我起作用:

s = "www.. "; //url
s = Uri.EscapeUriString(s);
task.URL = HttpUtility.UrlEncode(s);

0

你的URI确实需要进行转义。我认为更简单的方法是:

string url = "http://www.symfonee.com/Improv/addison/comedians/Bio.aspx?ShowDate=12/15/10&ShowTime=8:00p&Uid=54918a0d-1beb-4552-bdc8-2d474e3ea5ae";

WebBrowserTask browser = new WebBrowserTask();
browser.URL = Uri.EscapeUriString(url);
browser.Show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接