利用 HttpClient 进行网络请求并获取进度信息

.NET 下主要有三种方式可以进行网络请求相关操作,它们分别是 HttpWebRequestWebClientHttpClient。这三者的关系是不断递进发展的,所以一般使用 HttpClient 来进行网络请求。

本文主要讲述 HttpClient 的使用方法和进度获取。

比较

类别 HttpWebRequset WebClient HttpClient
命名空间 System.Net System.Net System.Net.Http
继承类 WebRequest Component HttpMessageInvoker
支持url转向
支持cookie和session
支持用户代理服务器
使用复杂度

HttpClient 使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 使用方式
{
HttpClientHandler handler = new HttpClientHandler();
ProgressMessageHandler progressMessageHandler = new ProgressMessageHandler(handler);
// 接收进度
progressMessageHandler.HttpReceiveProgress += ProgressMessageHandler_HttpProgress;
// 发送进度
progressMessageHandler.HttpSendProgress += ProgressMessageHandler_HttpProgress;
HttpClient httpClient = new HttpClient(progressMessageHandler)
{
Timeout = TimeSpan.FromMinutes(60)
};

using (MultipartFormDataContent multipartFormData = new MultipartFormDataContent())
{
multipartFormData.Add(new StreamContent(fileInfo.OpenRead()), "file", fileInfo.Name);
HttpResponseMessage resMessage = httpClient.PutAsync(uploadUrl, multipartFormData).GetAwaiter().GetResult();
if (!resMessage.IsSuccessStatusCode)
{
resultUrls.Add(resMessage.ReasonPhrase);
continue;
}
}
}

// 进度回调
private void ProgressMessageHandler_HttpProgress(object sender, HttpProgressEventArgs e)
{
// 在此处通过 HttpProgressEventArgs 获取进度信息
}

ProgressMessageHandler 位于 System.Net.Http.Formatting.dll 程序集中。一般系统没有自带该类库,要从网上自行下载。

✈ 点击下载

参考

  1. WebClient, HttpClient, HttpWebRequest的比较