回到目录

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

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

  1. public class User_Info
  2. {
  3. public int Id { get; set; }
  4. public string Name { get; set; }
  5. public string Info { get; set; }
  6. }

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

  1. [CorsAttribute("http://localhost:3321")]
  2. public class RegisterController : ApiController
  3. {
  4. public static List<User_Info> Model = new List<User_Info>()
  5. {
  6. new User_Info{Id=,Name="zzl",Info="zzl是楼主"},
  7. new User_Info{Id=,Name="zhz",Info="zhz是zzl的儿子"},
  8. new User_Info{Id=,Name="zql",Info="zql是zzl的妻子"},
  9. new User_Info{Id=,Name="bobo",Info="bobo是zzl的朋友"}
  10. };
  11.  
  12. // GET api/values
  13. public IEnumerable<User_Info> Get()
  14. {
  15. return Model;
  16. }
  17. // GET api/values/5
  18. public User_Info Get(int id)
  19. {
  20. var entity = Model.FirstOrDefault(i => i.Id == id);
  21. return entity;
  22. }
  23. // GET api/values/5?leval=1
  24. public HttpResponseMessage Get(int id, int leval)
  25. {
  26. return new HttpResponseMessage(HttpStatusCode.OK)
  27. {
  28. Content = new StringContent("<em style='color:red'>成功响应(id,level)</em>", System.Text.Encoding.UTF8, "text/html")
  29. };
  30. }
  31. // POST api/values
  32. public HttpResponseMessage Post([FromBody]User_Info value)
  33. {
  34. Model.Add(new User_Info
  35. {
  36. Id = value.Id,
  37. Info = value.Info,
  38. Name = value.Name,
  39. });
  40. //用户登陆相关
  41. return new HttpResponseMessage(HttpStatusCode.OK)
  42. {
  43. Content = new StringContent("添加数据成功,用户ID:" + value.Id, System.Text.Encoding.UTF8, "text/plain")
  44. };
  45. }
  46. // PUT api/values?userid=5
  47. public HttpResponseMessage Put(int userid, [FromBody]User_Info value)
  48. {
  49. var entity = Model.FirstOrDefault(i => i.Id == userid);
  50. entity.Info = value.Info;
  51. entity.Name = value.Name;
  52. return new HttpResponseMessage(HttpStatusCode.OK)
  53. {
  54. Content = new StringContent("修改数据成功,主键:" + userid + ",对象:" + value.Name)
  55. };
  56. }
  57.  
  58. // DELETE api/values/5
  59. public HttpResponseMessage Delete(int id)
  60. {
  61. Model.Remove(Model.FirstOrDefault(i => i.Id == id));
  62. return new HttpResponseMessage(HttpStatusCode.OK)
  63. {
  64. Content = new StringContent("删除数据成功")
  65. };
  66. }

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

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

HTML的JS实现

  1. $.ajax({
  2. url: "http://localhost:52824/api/register",
  3. type: "POST",
  4. data: { Id: 5, Name: '新来的', Info: '大家好' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value
  5. success: function (data) {
  6. console.log("post:" + data);
  7. }
  8. });
  9.  
  10. $.ajax({
  11. url: "http://localhost:52824/api/register",
  12. type: "GET",
  13. success: function (data) {
  14. for (var i in data) {
  15. console.log(data[i].Id + " " + data[i].Name);
  16. }
  17. }
  18. });

结果截图

aaarticlea/png;base64,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" alt="" />

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

  1.    /// <summary>
  2.   /// HttpClient实现Post请求
  3. /// </summary>
  4. static async void dooPost()
  5. {
  6. string url = "http://localhost:52824/api/register";
  7. //设置HttpClientHandler的AutomaticDecompression
  8. var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
  9. //创建HttpClient(注意传入HttpClientHandler)
  10. using (var http = new HttpClient(handler))
  11. {
  12. //使用FormUrlEncodedContent做HttpContent
  13. var content = new FormUrlEncodedContent(new Dictionary<string, string>()
  14. { {"Id","6"},
  15. {"Name","添加zzl"},
  16. {"Info", "添加动作"}//键名必须为空
  17. });
  18.  
  19. //await异步等待回应
  20.  
  21. var response = await http.PostAsync(url, content);
  22. //确保HTTP成功状态值
  23. response.EnsureSuccessStatusCode();
  24. //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
  25. Console.WriteLine(await response.Content.ReadAsStringAsync());
  26. }
  27.  
  28. }
  29. /// <summary>
  30. /// HttpClient实现Get请求
  31. /// </summary>
  32. static async void dooGet()
  33. {
  34. string url = "http://localhost:52824/api/register?id=1";
  35. //创建HttpClient(注意传入HttpClientHandler)
  36. var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
  37.  
  38. using (var http = new HttpClient(handler))
  39. {
  40. //await异步等待回应
  41. var response = await http.GetAsync(url);
  42. //确保HTTP成功状态值
  43. response.EnsureSuccessStatusCode();
  44.  
  45. //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
  46. Console.WriteLine(await response.Content.ReadAsStringAsync());
  47. }
  48. }
  49. /// <summary>
  50. /// HttpClient实现Put请求
  51. /// </summary>
  52. static async void dooPut()
  53. {
  54. var userId = 1;
  55. string url = "http://localhost:52824/api/register?userid=" + userId;
  56.  
  57. //设置HttpClientHandler的AutomaticDecompression
  58. var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
  59. //创建HttpClient(注意传入HttpClientHandler)
  60. using (var http = new HttpClient(handler))
  61. {
  62. //使用FormUrlEncodedContent做HttpContent
  63. var content = new FormUrlEncodedContent(new Dictionary<string, string>()
  64. {
  65. {"Name","修改zzl"},
  66. {"Info", "Put修改动作"}//键名必须为空
  67. });
  68.  
  69. //await异步等待回应
  70.  
  71. var response = await http.PutAsync(url, content);
  72. //确保HTTP成功状态值
  73. response.EnsureSuccessStatusCode();
  74. //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
  75. Console.WriteLine(await response.Content.ReadAsStringAsync());
  76. }
  77.  
  78. }

回到目录

WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递的更多相关文章

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

    原文:http://www.cnblogs.com/lori/p/4045633.html 下面定义一个复杂类型对象 public class User_Info { public int Id { ...

  2. 通过HttpClient来调用Web Api接口~续~实体参数的传递

    并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象进行传递,而这讲主要围绕这个话题来说,接口层添加一个新类User_Info,用来进行数 ...

  3. 通过HttpClient来调用Web Api接口,实体参数的传递

    下面定义一个复杂类型对象 public class User_Info { public int Id { get; set; } public string Name { get; set; } p ...

  4. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  5. WebApi系列~通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  6. 通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  7. c# 【MVC】WebApi通过HttpClient来调用Web Api接口

    /// <summary> /// HttpClient实现Post请求(异步) /// </summary> static async void dooPost() { st ...

  8. WebApi~通过HttpClient来调用Web Api接口

    异步请求 ///<summary> /// HttpClient实现Post请求(异步) /// </summary> static async void dooPost() ...

  9. 【WebApi】通过HttpClient调用Web Api接口

    HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...

随机推荐

  1. 慕课网Java高并发秒杀学习

    课程地址:http://www.imooc.com/learn/587 一个很好:spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 ...

  2. Map中的entry

    是java中的一个对象,一般可以通过map.entrySet()得到.1,entrySet实现了Set接口,里面存放的是键值对.一个K对应一个V.2,用来遍历map的一种方法.Set<Map.E ...

  3. Java变量自增和自减运算符的用法

    1.后加加(num++): 先输出运算结果再加加: public static void main(String[] args){ int num=10; int  p1=num++; System. ...

  4. linux环境下安装mongodb

    最近有用到mongodb,顺便找到了以前的指南,顺便写一篇随笔,以后或许有用到的地方. 第一步:下载mongodb的linux版本,mongodb-linux-x86_64-3.2.4.tgz(去官网 ...

  5. 8天入门wpf(转)

    8天入门wpf—— 第一天 基础概念介绍 8天入门wpf—— 第二天 xaml详解 8天入门wpf—— 第三天 样式 8天入门wpf—— 第四天 模板 8天入门wpf—— 第五天 数据绑定 8天入门w ...

  6. 轻量级ORM框架 Dapper快速学习

    好在有师兄师姐一起带着做,所以开始没那么困难,但是由于大学涉猎范围有限,往往有很尴尬的时候,不懂构造方法重载,去“请教”,本来以为师兄会帮忙写好,结果“我念,你来写”,被深深的激励了一把,后来就早出晚 ...

  7. linux进程间通信-共享内存

    转载:http://www.cnblogs.com/fangshenghui/p/4039720.html 一 共享内存介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它 ...

  8. 51NOD算法马拉松11 B君的竞技场

    传送门 这题我在比赛的时候竟然没有想出来,真是-- 这道题我们可以想一想怎么搞定获胜的概率p. 我们发现再怎么这个p都是搞不了的.所以我们可以积一下分,然后就可以不用去管p了.我们要做的就是求出一个关 ...

  9. jetty9 安装部署更改端口号

    1.下载jetty 并解压到指定目录 2.更改默认端口号--在start.d中的http.ini中修改 3.启动服务 在jetty的根目录中输入命令 java -jar start.jar  服务就启 ...

  10. Software Project Management hw1

    I just want to say something about my java project that I did last year. Our task is to finish a lin ...