【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 属性允许设置或改变标题。
相关推荐
84487600 2020-08-16
似水流年梦 2020-08-09
knightwatch 2020-07-26
fengchao000 2020-06-16
标题无所谓 2020-06-14
sicceer 2020-06-12
yanghui0 2020-06-09
yanghui0 2020-06-09
jiaguoquan00 2020-05-26
zhaolisha 2020-05-16
wanghongsha 2020-05-05
wanghongsha 2020-04-14
knightwatch 2020-04-11
hygbuaa 2020-03-27
zergxixi 2020-03-24
stoneechogx 2020-02-13