wpf中使用 HttpClientFactory创建HttpClient并下载文件

一,利用HttpClient下载文件的方法

public static async Task<bool> HttpDownloadFile(string downloadUrl, string localPath, log4net.ILog log)

{

bool bFlagDownloadFile = false;

//log.Debug("HttpDownloadFile--准备以HTTP的方式下载文件,url:[" + downloadUrl + "]本地文件:【" + localPath + "】");

try

{

var client = MainWindow.getHttpClient(); //定义见下面的"使用httpclientfactory"

//var client = new HttpClient();

//var response = client.GetAsync(downloadUrl).Result;

//if (response.IsSuccessStatusCode) // 确保HTTP响应状态码表示成功

//{

// using (var fs = new FileStream(localPath, FileMode.Create))

// {

// await response.Content.CopyToAsync(fs);

// bFlagDownloadFile = true;

// log.Debug("HttpDownloadFile--以HTTP的方式下载文件,本地文件:【" + localPath + "】成功!");

// }

//}

using (var response = await client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead))

{

response.EnsureSuccessStatusCode();

using (var fileStream = new FileStream(localPath, FileMode.Create))

{

using (var httpStream = await response.Content.ReadAsStreamAsync())

{

await httpStream.CopyToAsync(fileStream);

bFlagDownloadFile = true;

log.Debug("HttpDownloadFile--以HTTP的方式下载文件,本地文件:【" + localPath + "】成功!");

}

}

}

}

catch (Exception ex)

{

log.Error("HttpDownloadFile--以HTTP的方式下载文件,本地文件:【" + localPath + "】时发生错误!异常消息:" + ex.Message, ex);

bFlagDownloadFile = false;

}

return bFlagDownloadFile;

}

二、WPF使用httpclientfactory,步骤如下:

1,安装必要的NuGet包:

Microsoft.Extensions.DependencyInjection 和 Microsoft.Extensions.Http

2,配置依赖注入。

2.1,启动类App设置

using System;

using Microsoft.Extensions.DependencyInjection;

public partial class App : Application

{

public ServiceCollection services;

//在启动类App的启动方法

private void AppStartup(object sender, StartupEventArgs e)

{

services = new ServiceCollection();

services.AddHttpClient();

services.AddTransient(typeof(MainWindow));

IServiceProvider serviceProvider = services.BuildServiceProvider();

MainWindow mainWindow = serviceProvider.GetRequiredService<MainWindow>();

}

}

2.2,主窗口类MainWindow设置

using System.Net.Http;

public partial class MainWindow : Window

{

private static IHttpClientFactory _httpClientFactory;

public MainWindow()

{

//... 可以有个缺省的构造方法

}

public MainWindow(IHttpClientFactory httpClientFactory)

{

_httpClientFactory = httpClientFactory;

}

public static HttpClient getHttpClient()

{

var client = _httpClientFactory.CreateClient();

return client;

}

}

3,使用

var client = MainWindow.getHttpClient();

相关推荐
界面开发小八哥1 小时前
界面控件DevExpress WPF v25.1预览 - 支持Windows 11系统强调色
windows·wpf·界面控件·devexpress·ui开发·.net 9
军训猫猫头3 小时前
89.WPF 中实现便捷的数字输入框:DecimalUpDown 控件的使用 WPF例子 C#例子.
开发语言·c#·wpf
Pasregret5 小时前
缓存与数据库一致性深度解析与解决方案
数据库·缓存·wpf
Java林间2 天前
Zookeeper是什么?基于zookeeper实现分布式锁
分布式·zookeeper·wpf
zizisuo2 天前
1.微服务拆分与通信模式
微服务·wpf
程序员秘密基地2 天前
基于c#,wpf,ef框架,sql server数据库,音乐播放器
sql·sqlserver·c#·.net·wpf
Zhen (Evan) Wang3 天前
.NET 6 WPF 利用CefSharp.Wpf.NETCore显示PDF文件
.net·wpf·.netcore
冰茶_3 天前
WPF特性分析
学习·microsoft·c#·wpf
qq_196055874 天前
最快打包WPF 应用程序
wpf
baivfhpwxf20235 天前
wpf ScaleTransform
wpf