如何使用程序调用webApi接口

在C#中,传统调用HTTP接口一般有两种办法:

  • WebRequest/WebResponse组合的方法调用
  • WebClient类进行调用。

第一种方法抽象程度较低,使用较为繁琐;而WebClient主要面向了WEB网页场景,在模拟Web操作时使用较为方便,但用在RestFul场景下却比较麻烦,在Web API发布的同时,.NET提供了两个程序集:System.Net.HttpSystem.Net.Http.Formatting。这两个程序集中最核心的类是HttpClient。在.NET4.5中带有这两个程序集,而.NET4需要到Nuget里下载Microsoft.Net.Http和Microsoft.AspNet.WebApi.Client这两个包才能使用这个类,更低的.NET版本就只能表示遗憾了只能用WebRequest/WebResponse或者WebClient来调用这些API了。

在使用中,System.Net.Http这个程序集提供了HttpClient类以及相关的HTTP调用,而System.Net.Http.Formatting提供了一些针对HttpClient的帮助扩展,更好地支持了内容协商、Content创建等功能。下面我就和大家一起写一下这个例子:

public class Person

    {

        public long Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }

        public override string ToString()

        {

            return $"Id={Id} Name={Name} Age={Age} Sex={Sex}";

        }

    }


class Program { static void Main(string[] args) { var client = new HttpClient();
//基本的API URL
client.BaseAddress = new Uri("http://localhost:22658/");
//默认希望响应使用Json序列化(内容协商机制,我接受json格式的数据)
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//运行client接收程序
Run(client);
Console.ReadLine();
}
//client接收处理(都是异步的处理)
static async void Run(HttpClient client)
{
//post 请求插入数据
var result = await AddPerson(client);
Console.WriteLine($"添加结果:{result}"); //添加结果:true //get 获取数据
var person = await GetPerson(client);
//查询结果:Id=1 Name=test Age=10 Sex=F
Console.WriteLine($"查询结果:{person}"); //put 更新数据
result = await PutPerson(client);
//更新结果:true
Console.WriteLine($"更新结果:{result}"); //delete 删除数据
result = await DeletePerson(client);
//删除结果:true
Console.WriteLine($"删除结果:{result}");
} //post
static async Task<bool> AddPerson(HttpClient client)
{
//向Person发送POST请求,Body使用Json进行序列化
return await client.PostAsJsonAsync("api/Person", new Person() { Age = 10, Id = 1, Name = "test", Sex = "F" })
//返回请求是否执行成功,即HTTP Code是否为2XX
.ContinueWith(x => x.Result.IsSuccessStatusCode);
} //get
static async Task<Person> GetPerson(HttpClient client)
{
//向Person发送GET请求
return await await client.GetAsync("api/Person/1")
//获取返回Body,并根据返回的Content-Type自动匹配格式化器反序列化Body内容为对象
.ContinueWith(x => x.Result.Content.ReadAsAsync<Person>(
new List<MediaTypeFormatter>() {new JsonMediaTypeFormatter()/*这是Json的格式化器*/
,new XmlMediaTypeFormatter()/*这是XML的格式化器*/}));
} //put
static async Task<bool> PutPerson(HttpClient client)
{
//向Person发送PUT请求,Body使用Json进行序列化
return await client.PutAsJsonAsync("api/Person/1", new Person() { Age = 10, Id = 1, Name = "test1Change", Sex = "F" })
.ContinueWith(x => x.Result.IsSuccessStatusCode); //返回请求是否执行成功,即HTTP Code是否为2XX
}
//delete
static async Task<bool> DeletePerson(HttpClient client)
{
return await client.DeleteAsync("api/Person/1") //向Person发送DELETE请求
.ContinueWith(x => x.Result.IsSuccessStatusCode); //返回请求是否执行成功,即HTTP Code是否为2XX
} }

这就完成了这组API的调用,是不是非常简单方便?HTTPClient使用全异步的方法,并且他有良好的扩展性,我会在之后的博客中再聊这个问题。

OK,到此为止一组简单的Restful API和C#的调用客户端就完成了,但这只是开始,Web API是一个很强大的框架,他的扩展点非常丰富,这些扩展能为我们的开发提供很多的帮助,下一篇博文我将为大家带来WEB API中Filter的使用。

如何使用程序调用webApi接口的更多相关文章

  1. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  2. 利用委托与Lambada创建和调用webapi接口

    前言 现在项目中用的是webapi,其中有以下问题:    1.接口随着开发的增多逐渐增加相当庞大. 2.接口调用时不好管理. 以上是主要问题,对此就衍生了一个想法: 如果每一个接口都一个配置文件来管 ...

  3. aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误

    代码在运行到response = (HttpWebResponse)request.GetResponse();就开始报错 原因:可能因为所调用的接口不存在或者接口中存在错误,可用postman测试接 ...

  4. 微信小程序调用后台接口+热点新闻滚动展示

    1.微信JS文件,发送请求调用:  //将返回接口数据,写入Page({data})里面 //获取热点新闻,这个也是写在onload:function(){//code)里面的 wx.request( ...

  5. java微信小程序调用支付接口(转)

    简介:微信小程序支付这里的坑还是有的,所以提醒各位在编写的一定要注意!!! 1.首先呢,你需要准备openid,appid,还有申请微信支付后要设置一个32位的密钥,需要先生成一个sign,得到pre ...

  6. java微信小程序调用支付接口

    简介:微信小程序支付这里的坑还是有的,所以提醒各位在编写的一定要注意!!! 1.首先呢,你需要准备openid,appid,还有申请微信支付后要设置一个32位的密钥,需要先生成一个sign,得到pre ...

  7. 微信小程序调用api接口

    请求的第三方微信url大概有3种 1)$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&s ...

  8. 使用httpclient异步调用WebAPI接口

    最近的工作需要使用Bot Framework调用原有的WebAPI查询数据,查找了一些方法,大部分都是使用HttpClient调用的,现时贴出代码供参考 using System; using Sys ...

  9. 使用HttpClient调用WebAPI接口,含WebAPI端示例

    API端: using log4net; using System; using System.Collections.Generic; using System.IO; using System.L ...

随机推荐

  1. redis 使用 get 命令读取 bitmap 类型的数据

    在签到统计场景中,可以使用 bitmap 数据类型高效的存储签到数据,但 getbit 命令只能获取某一位值,就无法最优的满足部分业务场景了. 比如我们按年去存储一个用户的签到情况,365 天,只需要 ...

  2. Vijos P1794 文化之旅

    标签:                                         搜索图结构 最短路                                    NOIP普及组2012 ...

  3. syslog格式

    转自:http://wly719.iteye.com/blog/1827394 1.syslog格式介绍 在Unix类操作系统上,syslog广泛 应用于系统日志.syslog日志消息既可以记录在本地 ...

  4. SecureCRT自动备份脚本-思科

    利用SecureCRT脚本对思科设备进行批量备份: (1)新建文本文件(注意保存路径,本次测试路径为D:\backup\list.txt): x.x.x.x username password ena ...

  5. AndroidManifest中的Intent-filter标签

    经过测试,intent-filter标签中的: 1. <action android:name="android.intent.action.MAIN" /> 代表这是 ...

  6. python print 字体颜色

    例子: print '\033[35;43m(1)ip转换成数字\033[0m' \033[35;43m    ===>35列属于字颜色,43列属于背景颜色 字背景颜色范围: 40--49  4 ...

  7. 通用双向链表的设计(参考Linux系统中的实现)

    通常我们设计设计链表都是将数据域放在里面,这样每次需要使用链表的时候都需要实现一个链表,然后重新实现它的相关操作,这里参考Linux系统中的设计实现了一个通用的双向链表,只需要在你的结构里面有一个这个 ...

  8. JavaScript-Tool:jQuery

    ylbtech-JavaScript-Tool:jQuery 1.返回顶部 1. jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码 ...

  9. Tesseract的使用

    参考:http://blog.csdn.net/qy20115549/article/details/78106569 下载tess4j的安装包. 首先,在该网站中下载tess4j的安装包. http ...

  10. Laravel中的路由管理

    //路由中输出视图Route::get('/', function () { return view('welcome');}); //get路由请求Route::get('get',function ...