1. 程式人生 > WINDOWS開發 >【C#】HttpClient 的基本使用

【C#】HttpClient 的基本使用

簡單的非同步 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 屬性允許設定或改變標題。