zoukankan      html  css  js  c++  java
  • Web API初探

    前几天有位同事说web api中的接口参数为对象的时候不好接收,具体什么方式我忘记了,虽然本人以前并没有接触过这方面的知识,但是据说和MVC差不多的,今天小小的研究一下,我想应该是可以的。

    直接新建一个WEB API的项目,本人使用HttpClient这个类进行HTTP请求(简单方便强大些)

    一、GET请求

    先看GET方式请求

    我们先新建一个用户对象,重写ToString方法。

    public class Users
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public override string ToString()
        {
            string str = string.Format("Id={0}&UserName={1}", Id, UserName);
            return str;
        }
    }

    然后在一个Action中编写请求方法:

    public ActionResult Index()
    {
        Users users = new Users()
        {
            Id = 1,
            UserName = "wms"
        };
        string geturl = "http://localhost:34390/api/gpm/test/ObjGet?" + users.ToString();
        HttpClient client = new HttpClient();
        client.GetAsync(geturl);
        return View();
    }

    接收端:

    public class Users
    {
        public int Id { get; set; }
        public string UserName { get; set; }
    }
    
    [HttpGet]
    public void ObjGet([FromUri]Users users)
    {
        var obj = users;
    }

    看一下请求结果:

    结果是可以的,但是必须要加上HttpGet和FromUri这个属性,否则是不行的

     二、POST方式

    post方式还是有些麻烦的,为了便于传输,在Users类中新增一个方法:

    public class Users
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public override string ToString()
        {
            string str = string.Format("Id={0}&UserName={1}", Id, UserName);
            return str;
        }
        public Dictionary<string, string> ToDictionary()
        {
            return new Dictionary<string, string>()
            {
                {"Id",Id.ToString()},
                {"UserName",UserName}
            };
        }
    }

    在看一次请求过程:

    public ActionResult Index()
    {
        string posturl = "http://localhost:34390/api/gpm/test/ObjPost";
        Users postUser = new Users()
        {
            Id = 2,
            UserName = "wms2"
        };
        HttpContent content = new FormUrlEncodedContent(postUser.ToDictionary());
        HttpClient client = new HttpClient();
        client.PostAsync(posturl, content);
        return View();
    }

     接收端:

    [HttpPost]
    public void ObjPost([FromBody]Users users)
    {
        var user = users;
    }

    查看结果:

    这样是行的通的 

  • 相关阅读:
    scrollview嵌套listiview(解决高度问题以及两者滚动冲突问题)
    listview通过onscrollListener实现分页加载
    listview中的checkbox实现全选、反选、删除的功能
    【JavaScript】闭包应用之数据独立
    【JavaScript】闭包应用之数据缓存
    【问题:发现与解决】angularJs指令在dijit控件中的使用
    【转发】:CSS代码重构与优化之路
    写一个简易的富文本
    【html/css】若母div设置了透明度,如何才能使得里面的子div不继承母div的透明度
    【html/css】模态框的实现
  • 原文地址:https://www.cnblogs.com/wms01/p/6222286.html
Copyright © 2011-2022 走看看