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

相关推荐
Scout-leaf5 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
柒.梧.7 天前
基于SpringBoot+JWT 实现Token登录认证与登录人信息查询
wpf
十月南城10 天前
Flink实时计算心智模型——流、窗口、水位线、状态与Checkpoint的协作
大数据·flink·wpf
听麟12 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
@hdd12 天前
Kubernetes 可观测性:Prometheus 监控、日志采集与告警
云原生·kubernetes·wpf·prometheus
zls36536513 天前
C# WPF canvas中绘制缺陷分布map
开发语言·c#·wpf
专注VB编程开发20年13 天前
c#Redis扣款锁的设计,多用户,多台电脑操作
wpf
闲人编程14 天前
定时任务与周期性调度
分布式·python·wpf·调度·cron·定时人物·周期性
zls36536514 天前
C# WPF canvas中绘制缺陷分布map并实现缩放
开发语言·c#·wpf
数据知道15 天前
PostgreSQL:Citus 分布式拓展,水平分片,支持海量数据与高并发
分布式·postgresql·wpf