参照: 在一个空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

【ASP.NET Web API2】利用HttpClient调用Web API(TODO)的更多相关文章

  1. asp.net ajax客户端框架如何调用Web Service

    asp.net ajax客户端框架如何调用Web Service 1:Web Service类添加 [System.Web.Script.Services.ScriptService]特性2:需要异步 ...

  2. 使用HttpClient 调用Web Api

    C#4.5 添加了异步调用Web Api . 如果你的项目是4.5以上版本,可以直接参考官方文档. http://www.asp.net/web-api/overview/web-api-client ...

  3. 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法

    技能点:通过编写WebService,在页面js中调用WebService来进行数据查询. 网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的. 但由于诸如主 ...

  4. ASP.NET4.0中JavaScript脚本调用Web Service 方法

    环境:VS2019  .net 4.0 framework 根据教材使用ScriptManager在JavaScript中调用Web service 时,失败.现将过程和解决方法记录如下: 1.定义W ...

  5. ASP.NET不通过添加web引用的方式调用web service接口

    尊重原著作:本文转载自http://bbs.csdn.net/topics/360223969 创建方法 //动态调用web服务 public static object InvokeWebSer(s ...

  6. C#工具:利用HttpClient调用WebApi

    可以利用HttpClient来进行Web Api的调用.由于WebA Api的调用本质上就是一次普通的发送请求与接收响应的过程, 所有HttpClient其实可以作为一般意义上发送HTTP请求的工具. ...

  7. ASP.NET Core教程:在ASP.NET Core中使用HttPClient调用WebService

    一.前言 在以前的一篇文章中,曾经讲述过如何在ASP.NET Core中调用WebService.但是那种方式是通过静态引用的方式去调用的,如果是在生产环境中,肯定不能使用这种方式去调用,幸运的是微软 ...

  8. 【WebApi】通过HttpClient调用Web Api接口

    HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...

  9. 基于apache httpclient 调用Face++ API

    简要: 本文简要介绍使用Apache HttpClient工具调用旷世科技的Face API. 前期准备: 依赖包maven地址: <!-- https://mvnrepository.com/ ...

随机推荐

  1. Apache Kudu

    Apache Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力.Kudu支持水平扩展,使用Raft协议进行一致性保证,并且与Cloudera Impala和 ...

  2. STM32探秘 之FSMC

    源:STM32探秘 之FSMC STM32 FSMC总线深入研究

  3. 去duplicate的方法

    1.什么是duplicate,为什么要去除. 什么是duplicate:这是在建库的过程后,对已连有接头的DNA片段进行扩增,然后去接flowcell.之所以在建库后扩增,这是由于接flowcell的 ...

  4. 七、golang中接口、反射

    一.接口定义 1.定义 interface类型可以定义一组方法,但是这些不需要实现,并且interface不能包含任何变量 package main import ( "fmt" ...

  5. C#多线程学习之Thread

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. mongodb 中 Aggregation 的管道和分片集合( Pipeline and Sharded Collections)

    mongodb 中的aggretion 中,如果管道中存在一个与之相匹配的shard key ,那么这个管道只运行在与之相匹配的shard 中,在以前(3.2),pipeline 被分流,最后又由pr ...

  7. eclipse中web项目部署到本地tomcat中,但是在本地的tomcat的webapp下找不到发布的项目

    eclipse不像MyEclipse默认将项目部署到tomcat安装目录下的webapps中,而默认部署到工作目录下 为了使项目默认部署到tomcat安装目录下的webapps中,show view- ...

  8. 扩展KMP(转)

    拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i ...

  9. QT 使用QUdpSocket QUdpServer UDP 建立客户端与服务器端

    1. 模拟天气监控,每隔两秒从Server发送天气信息到Client. 2. 示例代码 --------------------------- Server 端 ------------------- ...

  10. Codeforces Round #374 (Div. 2) D. Maxim and Array 线段树+贪心

    D. Maxim and Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...