You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UWP应用中通过HttpClient API从.NET Core Web应用下载图片?

嘿,这事儿其实挺简单的,我来一步步给你捋明白怎么在UWP里用HttpClient下载你.NET Core Web应用里的图片~

第一步:确认Web端图片的可访问路径

首先,你的.NET Core Web应用里,wwwroot是默认的静态文件根目录,所以如果图片存在wwwroot/photos/user1/xxx.jpg,对应的访问URL就是http://你的Web应用地址/photos/user1/xxx.jpg(本地调试的话可能是https://localhost:5001/photos/user1/xxx.jpg)。不确定的话,先在浏览器里输入这个URL试试,能直接打开图片就说明路径没问题。

第二步:配置UWP应用的网络权限

UWP默认限制网络访问,得先给应用开权限:

  • 打开UWP项目的Package.appxmanifest文件
  • 切换到「功能」标签页
  • 勾选「Internet (Client)」(公网Web应用)或者「Private Networks (Client & Server)」(本地内网调试)
第三步:用HttpClient实现图片下载

这里分两种常用场景,你按需选就行:

场景1:下载到内存并显示在Image控件里

假设你的XAML里有个Image控件:

<Image x:Name="MyImage" Width="200" Height="200"/>

然后在后台按钮点击事件里写代码:

using System.Net.Http;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Popups;
using System.IO;

private async void DownloadImageButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    // 替换成你的图片实际URL
    string imageUrl = "http://your-web-app-url/photos/user1/sample.jpg";
    
    using (HttpClient client = new HttpClient())
    {
        try
        {
            // 下载图片字节流
            byte[] imageBytes = await client.GetByteArrayAsync(imageUrl);
            
            // 转成BitmapImage用于显示
            BitmapImage bitmap = new BitmapImage();
            using (var stream = new MemoryStream(imageBytes))
            {
                await bitmap.SetSourceAsync(stream.AsRandomAccessStream());
            }
            
            // 绑定到Image控件
            MyImage.Source = bitmap;
        }
        catch (Exception ex)
        {
            // 处理异常,比如网络错误、URL无效
            await new MessageDialog($"下载失败:{ex.Message}").ShowAsync();
        }
    }
}

场景2:下载并保存到UWP本地存储

如果要把图片存到本地(比如应用专属文件夹或图片库),代码可以这么写:

using System.Net.Http;
using Windows.Storage;
using Windows.UI.Popups;
using System.IO;

private async void SaveImageButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    string imageUrl = "http://your-web-app-url/photos/user1/sample.jpg";
    // 从URL里提取文件名
    string fileName = imageUrl.Split('/').Last();
    
    using (HttpClient client = new HttpClient())
    {
        try
        {
            // 获取图片响应流
            HttpResponseMessage response = await client.GetAsync(imageUrl);
            response.EnsureSuccessStatusCode(); // HTTP状态码非200时抛出异常
            
            // 选择保存位置:这里用应用的本地文件夹
            StorageFolder localFolder = ApplicationData.Current.LocalFolder;
            StorageFile file = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
            
            // 把响应流写入本地文件
            using (var stream = await file.OpenStreamForWriteAsync())
            {
                await response.Content.CopyToAsync(stream);
            }
            
            await new MessageDialog($"图片已保存:{file.Path}").ShowAsync();
        }
        catch (Exception ex)
        {
            await new MessageDialog($"保存失败:{ex.Message}").ShowAsync();
        }
    }
}
一些实用提醒
  • 如果你的Web应用用了HTTPS,本地调试时可能遇到证书不可信的问题,可以临时给HttpClient加个证书验证回调(生产环境别用这个!):
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
using (HttpClient client = new HttpClient(handler))
{
    // 后续下载操作
}
  • 一定要用异步方法!UWP里网络操作不能阻塞UI线程,不然会导致应用卡顿甚至崩溃。
  • 如果Web应用需要身份验证(比如Token),记得在请求头里加授权信息:
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "你的身份Token");

内容的提问来源于stack exchange,提问作者xiaozhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:27:34