【ASP.NET Web API2】利用HttpClient调用Web API(TODO)

         参照: 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

     纯属记录一下遇到的问题:

         我们利用HttpClient来调用自宿主方式寄宿的Web API。HttpClient定义在程序集“System.Net.Http.dll”中,还需要引用程序集“System.Net.Http.Formatting”,因为序列化请求和反序列化响应的相关类型定义在此程序集中,因为之前完全没有用过async&await 异步编程,于是跟着写了这样的一段代码

 static HttpClient httpClient = new HttpClient();
        static void Main(string[] args)
        {
            Console.WriteLine("------------初识数据------------");
            GetList();
            Add(new Contact() { ID="004", Name="小米", PhoneNum="1380020000" });
            Console.WriteLine("------------添加一个联系人后---------------");
            GetList();
            Console.Read();
        }

        /// <summary>
        /// 输出联系人列表
        /// </summary>
        private async static void GetList()
        {            
            HttpResponseMessage response = await httpClient.GetAsync("http://127.0.0.1:7304/api/contacts");
            List<Contact> contacts = await response.Content.ReadAsAsync<List<Contact>>();
            foreach (var item in contacts)
            {
                Console.WriteLine("{0}-{1}-{2}", item.ID, item.Name, item.PhoneNum);
            }
        }
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        private async static void Add(Contact model)
        {
            await httpClient.PostAsJsonAsync<Contact>("http://127.0.0.1:7304/api/contacts", model);
        }

运行后悲剧了,不是我预想的结果

 

于是想了解一下async&await,找到很多相关文章、博客,实在是看不下去,看不懂,断点还每次跳的位置都不一样,也是醉了。于是先把async&await的问题放放

改了一下GetList()和Add();

 

       /// <summary>
        /// 输出联系人列表
        /// </summary>
        private  static void GetList()
        {            
            HttpResponseMessage response =  httpClient.GetAsync("http://127.0.0.1:7304/api/contacts").Result;
            List<Contact> contacts =  response.Content.ReadAsAsync<List<Contact>>().Result;
            foreach (var item in contacts)
            {
                Console.WriteLine("{0}-{1}-{2}", item.ID, item.Name, item.PhoneNum);
            }
        }
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        private  static void Add(Contact model)
        {
           HttpResponseMessage response=  httpClient.PostAsJsonAsync<Contact>("http://127.0.0.1:7304/api/contacts", model).Result;
        }

 

结果:

原因是数据初始化在构造函数中,每次调用API contacts都变回原来定义的那样(基础知识差到不忍直视==!)

        List<Contact> contacts;
        public ContactsController()
        {
                contacts = new List<Contact>();
                contacts.Add(new Contact() { ID = "001", Name = "小白", PhoneNum = "13529093839" });
                contacts.Add(new Contact() { ID = "002", Name = "大白", PhoneNum = "13529093838" });
                contacts.Add(new Contact() { ID = "003", Name = "小黑", PhoneNum = "13529088838" });
         }

 ↑2015-04-11

 

posted @ 2015-05-08 14:17  10:00  阅读(298)  评论(0编辑  收藏  举报