.NET 下主要有三种方式可以进行网络请求相关操作,它们分别是
HttpWebRequest,WebClient 和
HttpClient。这三者的关系是不断递进发展的,所以一般使用
HttpClient 来进行网络请求。
本文主要讲述 HttpClient 的使用方法和进度获取。
比较
| 命名空间 | System.Net | System.Net | System.Net.Http | 
| 继承类 | WebRequest | Component | HttpMessageInvoker | 
| 支持url转向 | 是 | 否 | 是 | 
| 支持cookie和session | 是 | 否 | 否 | 
| 支持用户代理服务器 | 是 | 否 | 是 | 
| 使用复杂度 | 高 | 低 | 低 | 
HttpClient 使用方式
| 12
 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)
 {
 
 }
 
 | 
ProgressMessageHandler 位于 System.Net.Http.Formatting.dll
程序集中。一般系统没有自带该类库,要从网上自行下载。
✈
点击下载
参考
- WebClient,
HttpClient, HttpWebRequest的比较