日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何選擇WebClientHttpWebRequestHttpClient?

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)讀書(shū)」,作者碼農(nóng)讀書(shū)。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)讀書(shū)公眾號(hào)。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括龍泉網(wǎng)站建設(shè)、龍泉網(wǎng)站制作、龍泉網(wǎng)頁(yè)制作以及龍泉網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,龍泉網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到龍泉省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

當(dāng)我們?cè)谟?.NET 調(diào)用 RestAPI 時(shí)通常有三種選擇,分別為:WebClient, HttpWebRequest,HttpClient,這篇文章我們將會(huì)討論如何使用這三種方式去調(diào)用 RestAPI,我還會(huì)提供相應(yīng)的代碼案例來(lái)幫助你更好的理解這三者的概念和使用方式,簡(jiǎn)單來(lái)說(shuō):

  • HttpWebRequest 是一種相對(duì)底層的處理 Http request/response 的方式。
  • WebClient 提供了對(duì) HttpWebRequest 的高層封裝,來(lái)簡(jiǎn)化使用者的調(diào)用。
  • HttpClient 是一種新的處理 Http request/response 工具包,具有更高的性能。

接下來(lái)我們討論一下抽象類(lèi) WebRequest。

WebRequest

WebRequest 是一種基于特定的 http 實(shí)現(xiàn), 它是一個(gè)抽象類(lèi), 所以在處理 Reqeust 請(qǐng)求時(shí)底層會(huì)根據(jù)傳進(jìn)來(lái)的 url 生成相應(yīng)的子類(lèi),如: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 中第一個(gè)用來(lái)處理 Http 請(qǐng)求的類(lèi),在處理 Http請(qǐng)求和響應(yīng)方面給調(diào)用者提供了諸多的靈活性,你還可以使用這個(gè)類(lèi)來(lái)存取 headers, cookies, protocols 和 timeouts 等等,下面的代碼展示了其實(shí)現(xiàn)子類(lèi) 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 的高層封裝,它給調(diào)用者提供了更便捷的使用方式,理所當(dāng)然做出的犧牲就是 WebClient 的性能略遜于 HttpWebRequest,如果你的業(yè)務(wù)場(chǎng)景只是簡(jiǎn)單訪問(wèn)第三方的 Http Service,那么我建議你使用 WebClient ,同理如果你有更多的精細(xì)化配置則使用 HttpWebRequest,下面的代碼展示了如何使用 WebClient 。

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

HttpClient

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

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

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

值得注意的是當(dāng) response 出現(xiàn)錯(cuò)誤時(shí),默認(rèn)情況下 HttpClient 并不會(huì)拋出異常,如果你一定要求 HttpClient 在這種情況下拋出異常,可更改 IsSuccessStatusCode = false 來(lái)改變這種默認(rèn)行為,做法就是調(diào)用 response.EnsureSuccessStatusCode();。

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

在項(xiàng)目開(kāi)發(fā)中,推薦的做法是保持 HttpClient 的單例化,如果不這么做的話(huà),每次 Request 請(qǐng)求實(shí)例化一次 HttpClient ,那么大量的請(qǐng)求必將你的 socket 耗盡并拋出 SocketException 異常。

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


本文標(biāo)題:如何選擇WebClientHttpWebRequestHttpClient?
網(wǎng)址分享:http://m.5511xx.com/article/dhgpids.html