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

相关推荐
@淡 定9 小时前
分布式事务解决方案
分布式·wpf
棉晗榜10 小时前
WPF将程序集里面嵌入的资源文件下载到本机磁盘中,将项目中的文件下载到桌面
开发语言·wpf
△曉風殘月〆11 小时前
WPF MVVM实战系列教程(一、Prism框架介绍)
wpf·mvvm·prism
Aevget12 小时前
DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(三)?
wpf·界面控件·devexpress·ui开发·.net 10
△曉風殘月〆13 小时前
WPF MVVM实战系列教程(二、使用Visual Studio 创建Prism项目)
wpf·mvvm·prism
bugcome_com3 天前
WPF 核心布局控件全解析:从 Grid 到 UniformGrid 的实战应用
c#·wpf
观无3 天前
WPF-Datagrid控件的无缝滚动
wpf
꧁༺℘₨风、凌๓༻꧂4 天前
C# WPF 项目中集成 Pdf查看器
pdf·c#·wpf
Kiyra4 天前
WebSocket vs HTTP:为什么 IM 系统选择长连接?
分布式·websocket·网络协议·http·设计模式·系统架构·wpf