【WebApi】通过HttpClient调用Web Api接口
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();
}
}
/*
* / <summary>
* / HttpClient实现Post请求
* / </summary>
*/
static async void dooPost()
{
string url = "http://localhost:52824/api/register";
var userId = "";
/* 设置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<string, string>()
{
{ "", 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<string, string>()
{ {"Id","6"},
{"Name","zara"},
{"Info", "zzh"}
});
那最后呢也没有什么区别了,只不过在异步去请求的时候去更换PostAsync , GetAsync , PutAsync 。
【WebApi】通过HttpClient调用Web Api接口的更多相关文章
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- WebApi系列~通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
回到目录 上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对 ...
- 通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- 使用HttpClient 调用Web Api
C#4.5 添加了异步调用Web Api . 如果你的项目是4.5以上版本,可以直接参考官方文档. http://www.asp.net/web-api/overview/web-api-client ...
- 【ASP.NET Web API2】利用HttpClient调用Web API(TODO)
参照: 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 纯属记录一下遇到的问题: 我们利用HttpClient来调用自宿主方式寄宿的Web API.HttpCl ...
- WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递 【转】
原文:http://www.cnblogs.com/lori/p/4045633.html 下面定义一个复杂类型对象 public class User_Info { public int Id { ...
- c# 【MVC】WebApi通过HttpClient来调用Web Api接口
/// <summary> /// HttpClient实现Post请求(异步) /// </summary> static async void dooPost() { st ...
- WebApi~通过HttpClient来调用Web Api接口
异步请求 ///<summary> /// HttpClient实现Post请求(异步) /// </summary> static async void dooPost() ...
随机推荐
- 我的Python笔记02
声明:本文整理借鉴金角大王的Python之路,Day2 - Python基础2,仅供本人学习使用!!! 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表. ...
- Echarts line折线图使用(vue)
实现 首先引入echarts工具 // vue文件中引入echarts工具 let echarts = require('echarts/lib/echarts') require('echarts/ ...
- Ubuntu14.04下如何配置固定IP
首先用root用户登陆,然后输入你root的密码.如下图: 然后编辑interfaces文件,该文件位于/etc/network/下,执行如下命令: vim /etc/network/interf ...
- 【C语言编程练习】5.12 兔子产仔问题
1. 题目要求 把一对新生的兔子关在屋子里,已知一对两个月大的兔子以后买一个月可以生一对小兔子,而这一对心生的小兔子初生两个月以后才可以生小兔子,假如一年内没有死亡,一年可以繁殖成多少对? 2. 题目 ...
- 小飞机ss端口被占用处理
如图所示: 解决方法: 1.运行cmd 2.输入命令:netstat -aon|findstr "1080" 3.获取使用该端口的PID---“8540”,如下图所示: 4.输入命 ...
- 用挂载,使用NTFS移动硬盘,拷贝iPhone里的照片,拷到MAC
2. 写权限挂载移动硬盘 1) mount查看 2) diskutil umount /dev/disk2 3) sudo mount_ntfs -o rw,nobrowse /dev/disk2s1 ...
- 动态设置bootstrapswitch状态
checkbox的html <input type="checkbox" name="mySwitch" id="mySwitch"& ...
- microk8s
https://microk8s.io/ video guide: sudo snap install microk8s --classic #snap install microk8s --clas ...
- K8S 安装 Wordpress
基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Helm是目前Kubernetes服务编排领域的唯一 ...
- 使用datagrip链接mysql数据库的报错问题.
1. datagrip刚打开时候,选择风格是白是黑后, 会有一个选择什么数据库,有oracle...一大堆,别选错了.我的是mysql,不要选成了windows sql 和sql. 2 基本设置写完, ...