C# 中 HttpClient 的簡單使用


介紹

當我們在開發客戶端還有少部分服務端程序時,數據需要從 Webapi 服務器取得。在以前我使用的比較多的時 WebClient 和 HttpWebRequese,在新的 .Net 版本中,團隊為其帶來了更多的可選擇性——新的 HttpClient。它有着更加靈活的 API。發送請求和接收響應主要是通過 HttpRequestMessage 和 HttpResponseMessage 這來給你個類,通過屬性 Content 獲取 http 響應內容。

區別

HttpClient 與 WebClient 和 HttpWebRequest 相比,有以下幾個主義的

  1. HttpClient 實例初始化時不與服務器域名或者主機地址綁定,也就是說可以通過一個 HttpClient 實例發送多個不同的請求(比如同一個 HttpClient 請求  和  兩個服務器數據)
  2. HttpClient 通過設置 DefaultHeaders 設置 HttpHeader 並且應用於該實例的所有請求
  3. HttpClient 使用可以很容易的處理異步請求(Async / Await)

使用方法

HttpClient 提供有與 Http Method 匹配的方法,比如 GET / POST / PUT ...等。

先實現模擬一個 GET 請求,代碼如下

// 傳入參數 url 為請求地址 async Task Get(string uri = "http://api.domain.com/search";) { // 使用 using 語法建立一個明確周期的 HttpClient 實例  using (HttpClient client = new HttpClient()) { try { // 設置超時限制,有效防止浪費資源  client.Timeout = TimeSpan.FromSeconds(30); //使用 GetAsync 進行異步 HTTPGET 請求  HttpResponseMessage response = await client.GetAsync(uri); // 判斷服務器響應代碼是否為 2XX  response.EnsureSuccessStatusCode(); //使用 await 語法讀取響應內容  string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } catch (HttpRequestException e) { Console.WriteLine("Error Message :{0} ", e.Message); } } } 

除了直接使用與 Http Method 對應的方法外,還可以單獨構建 HttpRequestMessage 實例進行請求

async Task Get(string uri = "http://api.domain.com/search";) { using (HttpClient client = new HttpClient()) { HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, uri); await client.SendAsync(httpRequest) .ContinueWith(responseTask => { Console.WriteLine("Response: {0}", responseTask.Result); }); } } 

至於 Post 請求,對於初次接觸 HttpClient 的人可能顯得有些復雜,比較折騰,另一篇文章再講解。

最后一點,對於不想折騰的人,建議直接使用 RestSharp ,簡單好用,上手容易。

 轉自https://zhuanlan.zhihu.com/p/213733869?utm_source=wechat_session


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM