如果 Source 指向实际图像,则下面的 XAML 有效。
<Image Source="http://somewhere.com/somewhere.png" />
但是,如果 Source 是来自 url Shortner 服务的重定向,则图像无法加载。
有没有一种简单的方法来处理这个问题,还是我必须自己去兔子洞并处理重定向?
如果 Source 指向实际图像,则下面的 XAML 有效。
<Image Source="http://somewhere.com/somewhere.png" />
但是,如果 Source 是来自 url Shortner 服务的重定向,则图像无法加载。
有没有一种简单的方法来处理这个问题,还是我必须自己去兔子洞并处理重定向?
由于WebClient 实例的AllowAutoRedirect
标志设置为(请参阅此处的备注),因此以下可能有效,并且可能是处理重定向的最简单方法。但是请注意,我没有对其进行测试,因为我手头没有重定向的图像 URL。true
var url = ...
var buffer = (new WebClient()).DownloadData(url);
var bitmap = new BitmapImage();
using (var stream = new MemoryStream(buffer))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
image.Source = bitmap;
如果可行,您可以将此代码放入绑定转换器中。
说了这么多,我希望 WPF 的内置类型转换器(从 URL 字符串到 ImageSource)也可以使用 HttpWebRequest 或 WebClient。对于这两种情况,默认行为是允许重定向。因此,您的情况下的重定向可能由于其他原因而失败。