需要授权的图像源URI

时间:2013-02-19 20:41:48

标签: c# wpf

在我的WPF上Window我有一个Image,其UriSource设置为互联网上某些图片的网址。

<Image>
    <Image.Source>
        <BitmapImage UriSource="http://tinyurl.com/anmucph" />
    </Image.Source>
</Image>

当我在互联网上使用可公开访问的图像时,一切正常:WPF框架执行必要的HTTP GET请求并显示图像。

我想要做的是使用UriSource,这是一个需要HTTP GET请求带有Authorization标头的URL。 (我有我想要使用的Authorization标头字符串。)

如何使用需要授权的UriSource? WPF内置了一些东西吗?或者这是否需要自定义解决方案?如果是这样,我如何挂钩到WPF框架以提供用于执行HTTP GET的自定义逻辑?

3 个答案:

答案 0 :(得分:3)

我知道这是一个老线程,但我想跟进我找到的解决方案。

.net有一个很酷的功能,可以让你在系统或应用程序级别使用自己的方法覆盖它的核心。这可以用于WebRequest.Create方法

请参阅http://msdn.microsoft.com/en-us/library/bc0fhzk5.aspx

这篇文章是一个完整的例子,包括IWebRequestCreate,所以你不会陷入递归。

Add header to all* HTTP requests on a machine

毕竟,应用程序范围内的所有内容都将被强制使用您的create方法。

注意:在添加您的身份验证标题之前,请确保您位于正确的域名中,这样您就不会将身份验证提供给其他地方:)

答案 1 :(得分:0)

您是否拥有该资源的用户名和密码?如果它只是标准的HTTP身份验证:

,您可以指定这样的域名
http://username:password@tinyurl.com/anmucph

答案 2 :(得分:0)

使用WPF内置的工具无法做到这一点。

另一种方法是创建一个具有单个

的轻量级本地HTTP代理
  • GET http://localhost:####/proxy?uri={uri}&authorization={authorization}

操作(端口####位于防火墙后面),而后者又生成

  • GET {uri}

请求提供的授权标头值。

然后,您可以将UriSource设置为http://localhost:####/proxy?uri=X&authorization=Y,其中X是您要显示的安全资源的URI编码URI,Y是URI编码的授权要使用GET请求发送的标头。