【C#】HttpClient 的基本使用
阿新 • • 發佈:2020-06-04
簡單的非同步 Get 請求
using (var client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync(RemoteUrl); if (response.IsSuccessStatusCode) { WriteLine($"Response Status Code: {(int)response.StatusCode} {response.ReasonPhrase}"); string responseBodyAsText = await response.Content.ReadAsStringAsync(); WriteLine($"Received payload of {responseBodyAsText.Length} characters"); WriteLine(); WriteLine(responseBodyAsText); } }
建立一個 HttpClient 例項,這個例項需要呼叫 Dispose 方法釋放資源,這裡使用了 using 語句。接著呼叫 GetAsync,給它傳遞要呼叫的方法的地址,向伺服器傳送 Get 請求。對 GetAsync 的呼叫返回一個 HttpResponseMessage 物件,包含標題、狀態和內容。檢查響應的 IsSuccessStatusCode 屬性,可以確定請求是否成功,如果呼叫成功,就使用 ReadAsStringAsync 方法把返回的內容檢索為一個字串。
簡單的非同步 Post 請求
using (var client = new HttpClient()) { var values = new Dictionary<string,string>(); values.Add("name","123"); values.Add("pass","456"); FormUrlEncodedContent content = new FormUrlEncodedContent(values); HttpResponseMessage response = await client.PostAsync(RemoteUrl,content); if (response.IsSuccessStatusCode) { //... string responseBodyAsText = await response.Content.ReadAsStringAsync(); //... } }
FormUrlEncodedContent 繼承自 HttpClient。
測試 Post 伺服器(Node.js)
const http=require(‘http‘) const querystring=require(‘querystring‘) http.createServer(function (req,res){ var str=‘‘ req.on(‘data‘,function (data){ console.log("----------") str += data; }) req.on(‘end‘,function (){ var POST=querystring.parse(str); console.log(POST) }) res.end() }).listen(8080)
丟擲異常
try
{
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(RemoteUrl);
response.EnsureSuccessStatusCode();
//...
string responseBodyAsText = await response.Content.ReadAsStringAsync();
//...
}
}
catch (Exception ex)
{
WriteLine($"{ex.Message}");
}
如果呼叫 HttpClient 類的 GetAsync 方法失敗,預設情況下不產生異常,可呼叫 EnsureSuccessStatusCode 方法進行改變,該方法檢查 IsSuccessStatusCode 的值,如果是 false,則丟擲一個異常。
傳遞標題
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept","application/json;odata=verbose");
//...
}
發出請求時沒有設定或改變任何標題,但是 HttpClient 的 DefaultRequestHeaders 屬性允許設定或改變標題。