【问题标题】:URL Source Image Does Not Display In .Net CoreURL 源图像不显示在 .Net Core 中
【发布时间】:2019-11-17 19:24:01
【问题描述】:

我在 WPF .Net Core 3.0 中加载 URL 图像时遇到问题。我认为这是与 .Net 版本相关的问题,而不是与代码相关的问题或任何问题(鉴于我在 .Net Framework 4.7.2 中没有问题)。

这是有问题的行: <Image Source="http://cdn-www.airliners.net/aviation-photos/photos/7/0/1/1892107.jpg"/>

我需要 URL 格式的图像,我从 SQL 数据库中提取它。通过在示例中将源直接设置为 URL,我相信我已经消除了任何可能与服务器相关的问题(原始应用程序稍微复杂一些,但即使是这种简化的单行代码也不起作用)。

【问题讨论】:

    标签: c# wpf xaml .net-core


    【解决方案1】:

    问题是由于 URL 包含一系列重定向,包括从 HTTPSHTTP,这是不安全的。

    您可以通过在浏览器中加载原始 URL 并检查开发者控制台中的网络请求选项卡来查看执行的重定向:

    您可以通过向Image 控件的ImageFailed 事件添加处理程序来确认这会导致错误:

    图像控制:

    <Image Source="http://cdn-www.airliners.net/aviation-photos/photos/7/0/1/1892107.jpg" 
            ImageFailed="Image_ImageFailed" />
    

    事件处理程序:

    private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        Debug.WriteLine(e.ErrorException.Message);
    }
    

    这将导致以下错误消息被打印到调试输出中:

    远程服务器返回错误:(301) Moved Permanently。

    为什么这只发生在 .NET Core 中?

    Image 在下面使用HttpWebRequest 来解析 URL 源。使用 .NET Core,HttpWebRequest 行为被有意更改为不允许遵循HTTPS -&gt; HTTP 重定向,因为它存在安全风险。您可以查看this issue 了解详情,尤其是来自 David Shulman 的this post

    是的,这是 .NET Core 的设计。这是一个与安全相关的更改,以防止 HTTPS -> HTTP 重定向,这本质上是不安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2017-08-02
      • 2020-06-23
      相关资源
      最近更新 更多