HttpClient用法全解析

使用前先在NuGet 中获取下列依赖包

using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;

class Program
    {
        static void Main(string[] args)
        {

            /**
             * 学习HttpClient之前,我们得知道它有哪些优势!
             * 1、HttpClient可以模仿表单上传
             * 2、HttpClient可以指定多种请求动词
             * 3、它比HttpWebRequest更加简洁
             * 4、所有函数操作都是异步的
             * 
             * 那么使用HttpClient需要注意哪些?
             * 1、它是在.NET4.5中发布的,所以版本需要在4.5以上
             * 2、使用不当,会损耗系统资源
             * 3、不要使用using关键字包裹(无效,套接字资源不会跟随释放)
             * 4、当使用PUT、POST动词时,在异步调用时要使用HttpContent传入表单数据,而GET、DELETE等使用URL传递即可 
             * */

            //1、创建Uri对象(注意:这里的Uri和Url是有区别的)
            Uri uri01 = new Uri("https://localhost:44389/");

            //2、创建一个HttpClient对象
            HttpClient hc = new HttpClient();

            //2.5、设置指定要求webApi返回的数据类型,如果不指定,默认返回json
            hc.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            //3、设置HttpClient客户端要获取资源数据的地址:BaseAddress属性
            hc.BaseAddress = uri01;

            /**
             * 如果是POST或PUT提交,此处有一定变化
             * */
            3.1、将要传递的数据,序列化为json
            //List<EmployeeModel> dataList = new List<EmployeeModel>();
            //string postdata = JsonConvert.SerializeObject(dataList);
            3.2、将json字符串转化为发送HTTP请求的内容
            //HttpContent hcon = new StringContent(postdata);
            3.3、设置HTTP请求上的Content-Type内容镖头值(这是比GET多做的一步操作)
            //hcon.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            4、异步发送一个Post请求:PostAsync函数
            //Task<HttpResponseMessage> pushAction = hc.PostAsync("api/employee", hcon);

            //4、异步发送一个get请求:GetAsync函数
            Task<HttpResponseMessage> pushAction = hc.GetAsync("api/employee");
            //Task<HttpResponseMessage> pushAction = hc.GetAsync("api/employee?id=" + idStr); //如果是GET带参或者DELETE,直接URL传参即可(原因参考“URL传参和表单传参的区别”)

            //5、获取请求后返回的数据:Result属性
            HttpResponseMessage hrm = pushAction.Result;

            //6、判断返回的数据状态
            //StatusCode:获取返回的状态码
            //HttpStatusCode.OK:等效于HTTP状态200,System.Net.HttpStatusCode.OK 指示请求成功
            if (hrm.StatusCode == HttpStatusCode.OK)
            {
                //Content:获取HTTP响应消息的内容
                //ReadAsStringAsync():异步将HTTP内容序列号为字符串
                //Result:获取 Task<TResult> 结果值
                string str = hrm.Content.ReadAsStringAsync().Result;

                //6.5转换数据格式
                //将JSON反序列化为List对象(JsonConvert需要在引用Newtonsoft.Json.dll)
                List<EmployeeModel> emList = JsonConvert.DeserializeObject<List<EmployeeModel>>(str);

                //7、释放资源
                hc.Dispose();


                Console.ReadKey();
            }

        }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值