博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
阅读量:6177 次
发布时间:2019-06-21

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

,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象进行传递,而这讲主要围绕这个话题来说,接口层添加一个新类User_Info,用来进行数据传递,而客户端使用网页ajax和控制台HttpClient的方式分别进行实现,Follow me!

下面定义一个复杂类型对象

public class User_Info    {        public int Id { get; set; }        public string Name { get; set; }        public string Info { get; set; }    }

下面修改上次的api部分,让它对这个对象进行操作

[CorsAttribute("http://localhost:3321")]    public class RegisterController : ApiController    {        public static List
Model = new List
() { new User_Info{Id=1,Name="zzl",Info="zzl是楼主"}, new User_Info{Id=2,Name="zhz",Info="zhz是zzl的儿子"}, new User_Info{Id=3,Name="zql",Info="zql是zzl的妻子"}, new User_Info{Id=4,Name="bobo",Info="bobo是zzl的朋友"} }; // GET api/values public IEnumerable
Get() { return Model; } // GET api/values/5 public User_Info Get(int id) { var entity = Model.FirstOrDefault(i => i.Id == id); return entity; } // GET api/values/5?leval=1 public HttpResponseMessage Get(int id, int leval) { return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("
成功响应(id,level)", System.Text.Encoding.UTF8, "text/html") }; } // POST api/values public HttpResponseMessage Post([FromBody]User_Info value) { Model.Add(new User_Info { Id = value.Id, Info = value.Info, Name = value.Name, }); //用户登陆相关 return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("添加数据成功,用户ID:" + value.Id, System.Text.Encoding.UTF8, "text/plain") }; } // PUT api/values?userid=5 public HttpResponseMessage Put(int userid, [FromBody]User_Info value) { var entity = Model.FirstOrDefault(i => i.Id == userid); entity.Info = value.Info; entity.Name = value.Name; return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("修改数据成功,主键:" + userid + ",对象:" + value.Name) }; } // DELETE api/values/5 public HttpResponseMessage Delete(int id) { Model.Remove(Model.FirstOrDefault(i => i.Id == id)); return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("删除数据成功") }; }

而最关键的地方还是在各个客户端调用的时候,首先,你不能指望客户端去引用你的程序集,因为,不能平台无法实现这种引用(java & c#,js & C#,php & c#),所以,在调用时需要有它们各自的方法,而JS的ajax调用时,直接使用json对象即可,键名对象

实体的属性,在使用HttpClient时,直接为FormUrlEncodedContent对象赋一个键值对的集合即可,下面分别介绍一下

HTML的JS实现

$.ajax({            url: "http://localhost:52824/api/register",            type: "POST",            data: { Id: 5, Name: '新来的', Info: '大家好' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value            success: function (data) {                console.log("post:" + data);            }        });        $.ajax({            url: "http://localhost:52824/api/register",            type: "GET",            success: function (data) {                for (var i in data) {                    console.log(data[i].Id + " " + data[i].Name);                }            }        });

结果截图

Console程序中使用HttpClient对象进行实现

   ///         /// HttpClient实现Post请求        ///         static async void dooPost()        {            string url = "http://localhost:52824/api/register";             //设置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
() { {
"Id","6"}, {
"Name","添加zzl"}, {
"Info", "添加动作"}//键名必须为空 }); //await异步等待回应 var response = await http.PostAsync(url, content); //确保HTTP成功状态值 response.EnsureSuccessStatusCode(); //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) Console.WriteLine(await response.Content.ReadAsStringAsync()); } } ///
/// HttpClient实现Get请求 /// static async void dooGet() { string url = "http://localhost:52824/api/register?id=1"; //创建HttpClient(注意传入HttpClientHandler) var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; using (var http = new HttpClient(handler)) { //await异步等待回应 var response = await http.GetAsync(url); //确保HTTP成功状态值 response.EnsureSuccessStatusCode(); //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) Console.WriteLine(await response.Content.ReadAsStringAsync()); } } ///
/// HttpClient实现Put请求 /// static async void dooPut() { var userId = 1; string url = "http://localhost:52824/api/register?userid=" + 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
() { {
"Name","修改zzl"}, {
"Info", "Put修改动作"}//键名必须为空 }); //await异步等待回应 var response = await http.PutAsync(url, content); //确保HTTP成功状态值 response.EnsureSuccessStatusCode(); //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) Console.WriteLine(await response.Content.ReadAsStringAsync()); } }

 

转载于:https://www.cnblogs.com/lori/p/4045633.html

你可能感兴趣的文章
理论 | 朴素贝叶斯模型算法研究与实例分析
查看>>
docker安装gitlab只需要3分钟
查看>>
Android菜鸟学习js笔记 一
查看>>
Java基础之SPI机制
查看>>
使用js控制滚动条的位置
查看>>
【Tornado源码阅读笔记】tornado.web.Application
查看>>
lsyncd搭建测试
查看>>
移动web开发之像素和DPR
查看>>
nginx+tomcat+redis实现session共享
查看>>
UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
查看>>
rsync 介绍
查看>>
做一个合格的Team Leader -- 基本概念
查看>>
leetcode 190 Reverse Bits
查看>>
阿里巴巴发布AliOS品牌 重投汽车及IoT领域
查看>>
OPENCV图像处理(二):模糊
查看>>
glassfish4系统启动脚本
查看>>
VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
查看>>
独家 | 一文读懂推荐系统知识体系-下(评估、实战、学习资料)
查看>>
UIEvent UIResponder UI_04
查看>>
从非GP到GP
查看>>