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();

相关推荐
会飞的大可13 小时前
Spring Cloud Alibaba全景:Nacos、Sentinel、Seata整合实战
sentinel·wpf
baivfhpwxf202318 小时前
DataGrid 中增加选择列 功能实现
ui·wpf
czhc114007566321 小时前
winform 330 跨线程 异步
wpf·线程·winform
想你依然心痛1 天前
HarmonyOS 5.0教育行业解决方案:基于分布式能力的沉浸式智慧课堂系统
分布式·wpf·harmonyos
Maybe_ch1 天前
深度解析 WPF 线程模型:告别 UI 卡死,掌握 Dispatcher 核心机制
ui·wpf
code bean1 天前
【Halcon 】用 Halcon 实现涂抹:Region、仿射变换与 WPF 交互
wpf·交互·halcon
白露与泡影2 天前
Spring Cloud进阶--分布式权限校验OAuth2
分布式·spring cloud·wpf
枫叶丹42 天前
【HarmonyOS 6.0】ArkData 分布式数据对象新特性:资产传输进度监听与接续传输能力深度解析
开发语言·分布式·华为·wpf·harmonyos
一念春风2 天前
智能文字识别工具(AI)
开发语言·c#·wpf
故事不长丨2 天前
WPF MvvmLight 超详细使用教程
c#·wpf·mvvm·mvvmlight