并且我们知道了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);
}
}
});

结果截图

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

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());
} }
转:http://www.cnblogs.com/lori/p/4045633.html

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

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

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

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

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

  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. Spring(二)Bean入门

    一.BeanFactory介绍 1.1.Bean: 在Spring技术中是基于组件的 最基本了是最常用的单元 其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由S ...

  2. IOS 杂笔-3 (property参数)

    (1)内存管理相关参数 Retain:对对象release旧值,retain新值(适用于OC对象类型) Assign:直接赋值(默认,适用于非oc对象类型) Copy:release旧值,copy新值 ...

  3. C语言的判断语句

    // // main.c // homeWork1222 //// #include <stdio.h> int main(int argc, const char * argv[]) { ...

  4. C语言中的自定义函数

    C语言中可以使用系统函数也可以使用自己的函数,就是自定义函数 自定义函数分为四种 第一种:无参无返回值的 函数的声明 void sayH(); 函数的实现 void sayH(){ printf(&q ...

  5. 安装concrete时提示“...database does not support InnoDB database tables..."如何解决

    安装很多系统时,经常有有提示: "...database does not support InnoDB database tables..." 解决办法: 找到MySQL的配置文 ...

  6. JavaScript Patterns 3.3 Patterns for Enforcing new

    When your constructor has something like  this.member and you invoke the constructor without  new,  ...

  7. 如何在Java Filter 中注入 Service

    在项目中遇到一个问题,在 Filter中注入 Serivce失败,注入的service始终为null.如下所示: public class WeiXinFilter implements Filter ...

  8. nginx服务器中的安全配置

    一.关闭SELinux 安全增强型Linux(SELinux)的是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制. 但是,SELinux带来的附加安全性和使用复杂性上不成比例,性价比不 ...

  9. 边工作边刷题:70天一遍leetcode: day 71

    Longest Substring with At Most Two Distinct Characters # Given a string, find the length of the long ...

  10. 边工作边刷题:70天一遍leetcode: day 79

    3Sum Smaller 要点:类似的题还有lintcode的triangle count:https://github.com/delbao/onlineJudge/blob/master/lint ...