在WindowsPhone中从web下载一些图像时出现age_network_error

本文关键字:age network error 图像 中从 WindowsPhone web 下载 | 更新日期: 2023-09-27 18:10:23

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

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

我已经搜索了谷歌,发现这真的是WTF问题。

在WindowsPhone中从web下载一些图像时出现age_network_error

有一个很好的机会是把你搞砸了。你需要自己发出调用(而不是依赖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头不会自动添加到请求中-这意味着调用将被某些检查空Referrer的站点阻止,而不是其他不检查的站点。

切换到基于Silverlight的WP7/8。在Silverlight中,referrer是承载Silverlight控件的站点。所以,如果你有一个SL控制运行在http://mysite.com上,它使[任何]http请求,referrer头将自动设置为http://mysite.com。这是无法控制的(出于安全原因)。然而,Windows Phone虽然基于SL,却不需要受到相同的安全约束。然而,当他们将代码"移植"到Windows Phone时,他们在referrer中添加了一些值——这个值实际上是手机中的包位置(你可以通过fiddler看到这个)。它实际上是一些路径(/apps/storage/[guid])或类似的东西——我不记得确切的值了。要解决这个问题,您可以在发出请求的HTTP头中设置对站点的引用。