博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【WebApi】通过HttpClient调用Web Api接口
阅读量:6957 次
发布时间:2019-06-27

本文共 2560 字,大约阅读时间需要 8 分钟。

HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5。

它支持所有的http方法,自动转向,https协议,代理服务器。

一.Api接口参数标准化。

GET方式,可以有多个重载,有多个参数

POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递

Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象。

二.调用方

我们看一下最基本网页中ajax请求(Get | Set)

$.ajax({            url: "http://localhost:xxx/api/register",            type: "GET",            success: function (data) {                console.log("json:" + data);            }        });$.ajax({            url: "http://localhost:xxx/api/register",            type: "Post",             data: {'':''}            success: function (data) {                console.log("json:" + data);            }        });

三.通过控制台实现Get&&Post请求

//Get:static async void ClientGet(){    string    url    = "http://localhost:xxx/api/register";    var    handler = new HttpClientHandler()    {        AutomaticDecompression = DecompressionMethods.GZip    };    using ( var http = new HttpClient( handler ) )    {        var response = await http.GetAsync( url );        response.EnsureSuccessStatusCode();        await response.Content.ReadAsStringAsync();    }}/* * /  * / HttpClient实现Post请求 * /  */static async void dooPost(){    string    url    = "http://localhost:52824/api/register";    var    userId    = "1";/* 设置HttpClientHandler的AutomaticDecompression */    var handler = new HttpClientHandler()    {        AutomaticDecompression = DecompressionMethods.GZip    };/* 创建HttpClient(注意传入HttpClientHandler) */    using ( var http = new HttpClient( handler ) )    {/* 使用FormUrlEncodedContent做HttpContent */        var content = new FormUrlEncodedContent( new Dictionary
() { { "", userId } /* 键名必须为空 */ } );/* await异步等待回应 */ var response = await http.PostAsync( url, content );/* 确保HTTP成功状态值 */ response.EnsureSuccessStatusCode();/* await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) */ Console.WriteLine( await response.Content.ReadAsStringAsync() ); }}

无论是web,手机端,都是有自己的WebClient,都是一样的,语言也是,那如果说你的Api是一个的参数是一个对象类型的,这还是大同小异的,比如ajax的调用方式直接把data变成一个data对象,那我们C#的这个参数应该是个什么呢,这个时候我们应该用到FormUrlEncodedContent,使用这个类型去做httpcontext.

var content = new FormUrlEncodedContent(new Dictionary
()   { {"Id","6"}, {"Name","zara"}, {"Info", "zzh"}  });

 那最后呢也没有什么区别了,只不过在异步去请求的时候去更换PostAsync , GetAsync , PutAsync 。

转载于:https://www.cnblogs.com/ZaraNet/p/10026366.html

你可能感兴趣的文章
DotImage使用教程:从数据库中读写图像
查看>>
锐捷CCNA系列(五) 交换机配置模式切换
查看>>
ffmpeg的使用
查看>>
【最小割】【Dinic】bzoj3275 Number
查看>>
PHP RSA加解密示例(转)
查看>>
Django权限1
查看>>
Python调用 c++ dll,并且使用Py2exe打包
查看>>
安卓布局随记
查看>>
使用gearman进行异步的邮件或短信发送
查看>>
XGBoost:在Python中使用XGBoost
查看>>
python基础知识~ 序列化
查看>>
Activity的启动模式(android:launchMode)
查看>>
java设计模式演示样例
查看>>
创建与删除索引
查看>>
HTML5新增核心工具——canvas
查看>>
改动file header (測)
查看>>
微软职位内部推荐-Senior Speech TTS
查看>>
UVA - 10574 Counting Rectangles
查看>>
HDU3336-Count the string(KMP)
查看>>
常用API接口签名验证参考
查看>>