在Windows Phone中从Web下载某些图像时出现AG_E_NETWORK错误

时间:2013-04-21 11:55:08

标签: c# silverlight windows-phone-7 html-agility-pack

我正在使用HtmlAgilityPack。 我正在从一个网站下载文章和图像。 80%的图像下载没有问题。但有些图像投掷错误。我可以在image_failed事件中看到错误名称。 我正在下载这样的图像:

 Image = new BitmapImage(new Uri(img.Attributes["src"].Value));

我搜索了谷歌,发现这确实是WTF问题。

1 个答案:

答案 0 :(得分:3)

引用者标题很可能会让你失望。您需要自己发出调用(而不是依赖BitmapImage来下载文件)。

有一个方便的代码段/实用程序可以“扩展”xaml并使其更容易完成。

http://blogs.msdn.com/b/swick/archive/2011/08/04/wp7-mango-image-download-with-custom-referer-header.aspx

编辑:说明

许多网站都阻止了不是来自网站的图片请求。这样,如果您有http://mysite.com并且链接到http://cnn.com中的图片,他们就可以阻止直接链接的图片并将其重定向或其他内容。

现在,它的工作原理是浏览器控制从标签(或任何其他机制,如AJAX)发出的所有调用,并添加REFERRER HTTP标头,说明请求的来源(http://mysite.com ) - 然后cnn.com代码可以阻止它。

在.NET桌面中,Referrer标头不会自动添加到请求中 - 这意味着某个检查空引荐来源的网站会阻止该通话,而不会检查其他未通知的网站。

切换到基于Silverlight的WP7 / 8。在Silverlight中,引用者是托管Silverlight控件的站点。因此,如果您在http://mysite.com上运行SL控件并发出[任意] http请求,则会自动为您设置引荐来源标头http://mysite.com。由于安全原因,没有办法控制那个afaik。但是,Windows Phone虽然基于SL,但不需要受相同安全约束的约束。然而,当他们将代码“移植”到Windows Phone时,他们将一些值放入referrer中 - 值实际上是手机内的包位置(你可以通过使用fiddler看到这一点)。它实际上是一些路径(/ apps / storage / [guid])或类似的东西 - 我不记得确切的价值。要解决此问题,您可以将引用者设置为发出请求的HTTP标头上的站点。

希望能说清楚。