【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 属性允许设置或改变标题。

相关推荐