WebClient, HttpClient, HttpWebRequest ,RestSharp之間的區別與抉擇 NetCore 2.1中的HttpClientFactory最佳實踐

 

NETCore提供了三種不一樣類型用於生產的REST API: HttpWebRequest;WebClient;HttpClient開源社區建立了另外一個名爲RestSharp的庫。如此多的http庫,該怎樣選擇呢?
html

HttpWebRequest

這是.NET建立者最初開發用於使用HTTP請求的標準類。使用HttpWebRequest可讓開發者控制請求/響應流程的各個方面,如 timeouts, cookies, headers, protocols。另外一個好處是HttpWebRequest類不會阻塞UI線程。例如,當您從響應很慢的API服務器下載大文件時,您的應用程序的UI不會中止響應。web

然而,強大的個性化操做帶來了極大的複雜性。爲了簡單起見,GET您須要至少五行代碼;
編程

HttpWebRequest http = (HttpWebRequest)WebRequest.Create("http://example.com");
                WebResponse response = http.GetResponse();
                Stream stream = response.GetResponseStream();
                using (var streamtemn = File.Create("路徑"))
                {
                    stream.CopyTo(streamtemn);
                }

 

若是對http協議不是瞭如指掌,使用HttpWebRequest會增長你的開發成本,除非你須要很是細節的處理和底層的控制,另外HttpWebRequest庫已通過時,不適合業務中直接使用,他更適用於框架內部操做。api

 WebClient

WebClient是一種更高級別的抽象,是HttpWebRequest爲了簡化最多見任務而建立的,使用過程當中你會發現他缺乏基本的header,timeoust的設置,不過這些能夠經過繼承httpwebrequest來實現使用WebClient可能比HttpWebRequest直接使用更慢(大約幾毫秒)但這種「低效率」帶來了巨大的好處:它須要更少的代碼和隱藏了細節處理,更容易使用,而且在使用它時你不太可能犯錯誤。一樣的請求示例如今很簡單隻須要兩行並且內部周到的處理完了細節:服務器

using (WebClient webClient = new WebClient())
                {
                    webClient.DownloadFile("http://example.com", "路徑");
                }

HttpClient

HttpClient提供強大的功能,提供了異步支持,能夠輕鬆配合async await 實現異步請求,具體使用可參考:NetCore 2.1中的HttpClientFactory最佳實踐cookie

RestSharp

 

restsharp是開源社區貢獻,具備HttpWebRequest的細節控制和WebClient的使用簡單的優勢從而讓他功能強大的同時又簡化了操做(從他定義的接口能夠看出真是一個優秀的http庫啊😊)
框架

結論

  • HttpWebRequest 已經不推薦直接使用了,這已經做爲底層機制,不適合業務代碼使用
  • WebClient 不想爲http細節處理而頭疼的coder而生,因爲內部已經處理了通用設置,某些狀況可能致使性能不是很理想
  • RestSharp 兼具強大功能和友好api很適合業務中使用
  • HttpClient 更加適用於異步編程模型中

參考:異步

https://stackoverflow.com/questions/22791376/is-httpwebrequest-or-webclient-faster/22792326#22792326async

https://stackoverflow.com/questions/20530152/deciding-between-httpclient-and-webclient異步編程

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2ce80a71-1ced-4bcd-adb4-88eef6e6a42d/httpclient-vs-httpwebrequest?forum=wcf

https://stackify.com/restsharp/?utm_referrer=https%3A%2F%2Fwww.google.com%2F

相關文章
相關標籤/搜索