热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

回到目录上一讲中介绍了使用HttpClient如何去调用一个标准的WebApi接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象

回到目录

上一讲中介绍了使用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 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());
}

}

 回到目录


推荐阅读
  • asp.net(vb脚本)如何获取xml的节点值?xmlversion1.0encodingutf-8?rootimageimagemenusmenuurl#frame_paren ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。脚本数据保存如果您已初始化dataProcessor,则用户或以编程方式所做的任何更改都将自动 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • ASP.NET&Spring.NET&NHibernate最佳实践(五)——第3章人事子系统(2)
    3.4.人事子系统服务层(Service)部门服务接口(IDeptService.cs)usingSystem;usingGuushuuse.SalaryPrj. ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 表单代码 ... [详细]
author-avatar
手机用户2502883445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有