成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何選擇 WebClient HttpWebRequest HttpClient ?

開發 前端
HttpWebRequest 是一種相對底層的處理 Http request/response 的方式。WebClient 提供了對 HttpWebRequest 的高層封裝,來簡化使用者的調用。HttpClient 是一種新的處理 Http request/response 工具包,具有更高的性能。

[[385547]]

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書。轉載本文請聯系碼農讀書公眾號。

當我們在用 .NET 調用 RestAPI 時通常有三種選擇,分別為:WebClient, HttpWebRequest,HttpClient,這篇文章我們將會討論如何使用這三種方式去調用 RestAPI,我還會提供相應的代碼案例來幫助你更好的理解這三者的概念和使用方式,簡單來說:

  • HttpWebRequest 是一種相對底層的處理 Http request/response 的方式。
  • WebClient 提供了對 HttpWebRequest 的高層封裝,來簡化使用者的調用。
  • HttpClient 是一種新的處理 Http request/response 工具包,具有更高的性能。

接下來我們討論一下抽象類 WebRequest。

WebRequest

WebRequest 是一種基于特定的 http 實現, 它是一個抽象類, 所以在處理 Reqeust 請求時底層會根據傳進來的 url 生成相應的子類,如:HttpWebRequest 或 FileWebRequest ,下面的代碼展示了如何使用 WebRequest。

  1. WebRequest webRequest = WebRequest.Create(uri); 
  2. webRequest.Credentials = CredentialCache.DefaultCredentials; 
  3. webRequest.Method ="GET"
  4. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 

WebRequest 是 .NET Framework 中第一個用來處理 Http 請求的類,在處理 Http請求和響應方面給調用者提供了諸多的靈活性,你還可以使用這個類來存取 headers, cookies, protocols 和 timeouts 等等,下面的代碼展示了其實現子類 HttpWebRequest 是如何使用的。

  1. HttpWebRequest http = HttpWebRequest)WebRequest.Create(“http://localhost:8900/api/default”); 
  2. WebResponse response = http.GetResponse(); 
  3. MemoryStream memoryStream = response.GetResponseStream(); 
  4. StreamReader streamReader = new StreamReader(memoryStream); 
  5. string data = streamReader.ReadToEnd(); 

WebClient

WebClient 是 HttpWebRequest 的高層封裝,它給調用者提供了更便捷的使用方式,理所當然做出的犧牲就是 WebClient 的性能略遜于 HttpWebRequest,如果你的業務場景只是簡單訪問第三方的 Http Service,那么我建議你使用 WebClient ,同理如果你有更多的精細化配置則使用 HttpWebRequest,下面的代碼展示了如何使用 WebClient 。

  1. string data = null
  2.  
  3. using (var webClient = new WebClient()) 
  4.     data = webClient.DownloadString(url); 

HttpClient

HttpClient 是在 .NET Framework 4.5 中被引入的,如果你的項目是基于 .NET 4.5 以上版本,除一些特定的原因之外,建議你優先使用 HttpClient,本質上來說,HttpClient 作為后來之物,它吸取了 HttpWebRequest 的靈活性及 WebClient 的便捷性,所以說和可兼得。

HttpWebRequest 在 request/response 對象上提供了非常精細化的配置,同時你也要注意 HttpClient 的出現并不是為了取代 WebClient,言外之意就是 HttpClient 也有缺點,比如說:不能提供 進度處理 和 URI 定制,不支持 FTP 等等,HttpClient 的優點也有很多,它所有關于 IO 操作的方法都是異步的,當然有特殊原因的話也可以使用同步方式,下面的代碼展示了如何使用 HttpClient。

  1. public async Task<Author> GetAuthorsAsync(string uri) 
  2.     Author author = null
  3.     HttpResponseMessage response = await client.GetAsync(uri); 
  4.     if (response.IsSuccessStatusCode) 
  5.     { 
  6.         author = await response.Content.ReadAsAsync<Author>(); 
  7.     } 
  8.     return author; 

值得注意的是當 response 出現錯誤時,默認情況下 HttpClient 并不會拋出異常,如果你一定要求 HttpClient 在這種情況下拋出異常,可更改 IsSuccessStatusCode = false 來改變這種默認行為,做法就是調用 response.EnsureSuccessStatusCode();。

  1. public async Task<Author> GetAuthorsAsync(string uri) 
  2.     Author author = null
  3.  
  4.     HttpResponseMessage response = await client.GetAsync(uri); 
  5.  
  6.     response.EnsureSuccessStatusCode(); 
  7.      
  8.     if (response.IsSuccessStatusCode) 
  9.     { 
  10.         author = await response.Content.ReadAsAsync<Author>(); 
  11.     } 
  12.  
  13.     return author; 

在項目開發中,推薦的做法是保持 HttpClient 的單例化,如果不這么做的話,每次 Request 請求實例化一次 HttpClient ,那么大量的請求必將你的 socket 耗盡并拋出 SocketException 異常。

譯文鏈接:https://www.infoworld.com/article/3198673/when-to-use-webclient-vs-httpclient-vs-httpwebrequest.html

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2020-03-24 15:15:29

HttpClientOkHttpJava

2009-09-02 15:41:21

C# HTTPWebR

2009-09-07 13:41:48

C# HttpWebR提交數據方式

2024-03-11 09:32:55

WebClientSpringHTTP

2009-09-02 18:14:33

C# WebClien

2022-09-15 00:08:46

密碼安全身份驗證

2023-07-21 12:13:50

綜合布線數據中心

2014-11-21 09:56:57

語言

2024-11-21 14:42:31

2014-06-10 10:01:09

HttpClientClose_Wait

2023-11-09 09:13:48

GraphQLAPI 架構

2019-11-11 05:12:16

邊緣計算數據中心網絡

2020-12-31 08:08:23

SSL證書企業

2024-04-15 11:24:32

庫存跟蹤技術NFC藍牙

2021-08-06 09:12:46

邊緣計算AI物聯網

2012-03-01 19:25:56

電子郵件郵件歸檔安全

2020-07-09 08:00:25

Git分支模式

2009-09-09 14:49:55

CCNA培訓機構

2013-01-23 09:15:58

SaaS移動開發平臺

2015-07-03 10:53:29

虛擬化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费播放视频 | 欧美日韩国产免费 | 久久亚洲一区二区三 | 中文精品一区二区 | 免费成人高清在线视频 | 日韩欧美在线视频 | 91久色| 日韩在线视频一区 | 午夜爽爽男女免费观看hd | 亚洲欧洲视频 | www日本在线 | 男女网站在线观看 | 精品亚洲一区二区三区 | 成人午夜视频在线观看 | 精品久久精品 | 久久久国产一区二区 | 国产中文字幕在线观看 | 国产99久久精品一区二区永久免费 | 九九免费在线视频 | 日韩精品一区二区三区高清免费 | 99在线免费视频 | 精品在线视频播放 | 一级毛片色一级 | 午夜免费网站 | 国产一区二区在线视频 | 久久99国产精一区二区三区 | 国产三区在线观看视频 | 国产精品久久久久久久久久免费看 | 日韩一区二区福利视频 | 欧美在线视频网 | 国产91亚洲精品 | 日本在线视频一区二区 | 欧美在线二区 | 在线观看av网站永久 | 精品国产乱码一区二区三 | 91精品一区 | 四虎影院久久 | 黄色片大全在线观看 | 久久久久久中文字幕 | 欧美一区二区大片 | 国产精品亚洲第一 |