欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/9/20 编程问答 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 通过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/valuespublic IEnumerable<User_Info> Get(){return Model;}// GET api/values/5public User_Info Get(int id){var entity = Model.FirstOrDefault(i => i.Id == id);return entity;}// GET api/values/5?leval=1public 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/valuespublic 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=5public 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/5public 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端参数名必须为valuesuccess: 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的AutomaticDecompressionvar handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };//创建HttpClient(注意传入HttpClientHandler)using (var http = new HttpClient(handler)){//使用FormUrlEncodedContent做HttpContentvar 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的AutomaticDecompressionvar handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };//创建HttpClient(注意传入HttpClientHandler)using (var http = new HttpClient(handler)){//使用FormUrlEncodedContent做HttpContentvar 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接口~续~实体参数的传递的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。