WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递

简介:

上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了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<User_Info> Model = new List<User_Info>()
        {
            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<User_Info> 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("<em style='color:red'>成功响应(id,level)</em>", 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对象进行实现

       /// <summary>
        /// HttpClient实现Post请求
        /// </summary>
        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<string, string>()       
                {    {"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());
            }

        }
        /// <summary>
        /// HttpClient实现Get请求
        /// </summary>
        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());
            }
        }
        /// <summary>
        /// HttpClient实现Put请求
        /// </summary>
        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<string, string>()       
                {
                   {"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());
            }

        }

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
JSON 监控 API
京东商品数据获取新姿势:商品列表API参数全解析
京东商品列表API是京东开放平台的核心接口,支持开发者高效获取商品名称、价格、销量等信息,适用于电商分析、价格监控等场景。提供关键词搜索、分类筛选、价格区间、排序及分页功能,支持HTTPS请求,数据实时更新,单次可查询最多200个SKU,助力电商应用开发。
|
6月前
|
JSON 监控 供应链
京东商品详情API参数构造指南:必填参数与自定义字段配置
京东商品详情API由京东开放平台提供,支持获取商品基础信息、价格库存、SKU规格等120+字段,适用于价格监控、库存管理等场景。接口采用HTTPS协议、JSON格式,数据延迟≤30秒,支持高并发。提供Python请求示例,便于快速接入。
|
11月前
|
自动驾驶 程序员 API
告别重复繁琐!Apipost参数描述库让API开发效率飙升!
在API开发中,重复录入参数占用了42%的时间,不仅效率低下还易出错。Apipost推出的参数描述库解决了这一痛点,通过智能记忆功能实现参数自动填充,如版本号、分页控制、用户信息等常用字段,大幅减少手动输入。支持Key-Value与Raw-Json格式导入,一键提取响应结果至文档,将创建20参数接口文档时间从18分钟缩短至2分钟。相比Postman需手动搜索变量,Apipost的参数复用响应速度仅0.3秒,且支持跨项目共享与实时纠错,真正实现“一次定义,终身受益”。
|
8月前
|
供应链 数据挖掘 API
1688商品详情API全字段解析:从基础参数到SKU深度挖掘
1688商品详情API为开发者提供高效获取商品信息的官方通道,支持自动化获取标题、价格、库存等核心数据,适用于电商开发、数据分析及供应链管理。接口支持灵活参数配置,并提供Python调用示例,便于快速集成与应用。
|
8月前
|
监控 供应链 API
1688商品列表API全参数指南:从基础搜索到高级筛选
1688商品列表API是阿里巴巴B2B平台的核心接口,支持关键词搜索、高级筛选、排序与分页功能,适用于选品、价格监控等场景。数据规范、稳定高效,日均调用量大。提供Python示例代码,便于快速接入与扩展应用。
|
11月前
|
JSON 监控 API
1688 商品列表 API 深度拆解:从参数配置到数据获取
1688 是重要的批发采购平台,其商品列表 API 接口为开发者、商家和数据分析人员提供批量获取商品基础信息(如名称、价格、销量等)的能力。该接口支持市场调研、竞品分析等场景,助力商业决策与效率提升。接口基于 HTTPS 协议,采用 GET 或 POST 请求方式,需提供通用参数(如 app_key、timestamp 等)和业务参数(如 category_id、page_no 等)。响应数据以 JSON 格式返回,包含商品详情及分页信息。
355 13
|
11月前
|
人工智能 搜索推荐 IDE
突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案
本文介绍了Web Unlocker API、Web-Scraper和SERP API三大工具,助力解决AI训练与微调数据集获取难题。Web Unlocker API通过智能代理和CAPTCHA绕过技术,高效解锁高防护网站数据;Web-Scraper支持动态内容加载,精准抓取复杂网页信息;SERP API专注搜索引擎结果页数据抓取,适用于SEO分析与市场研究。这些工具大幅降低数据获取成本,提供合规保障,特别适合中小企业使用。粉丝专属体验入口提供2刀额度,助您轻松上手!
582 2
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
数据可视化 JavaScript 前端开发
利用Postman和Apipost进行API测试的实践与优化-动态参数
在API测试中,Postman和Apipost是常用的工具。Postman内置变量功能有限,面对复杂场景时需编写JavaScript脚本,增加了维护成本。而Apipost提供丰富的内置变量、可视化动态值配置和低代码操作,支持生成真实随机数据,如邮箱、手机号等,显著提升测试效率和灵活性。对于复杂测试场景,Apipost是更好的选择,能有效降低开发与维护成本,提高测试工作的便捷性和可维护性。
|
12月前
|
SQL 关系型数据库 MySQL