• WebApi传参总动员(二)


    上篇,从最简单的string入手。本篇演示了从请求的输入流中获取实体。api:

        public class ValuesController : ApiController
        {
            
            [HttpPost]
            public string GetData(string name)
            {
                return "我爱" + name;
            }
            [HttpPost]
            public string GetData()
            {
                var stream = HttpContext.Current.Request.InputStream;
                byte[] byts = new byte[stream.Length];
                stream.Read(byts, 0, (int)stream.Length);
                //以UTF8形式获取数据
                string json = Encoding.UTF8.GetString(byts);
                Woman woman = JsonConvert.DeserializeObject<Woman>(json);
                return woman.Age + "" + woman.Name;
            }
        }
        public class Woman//仅仅为了演示方便
        {
            public string Name{get;set;}
            public string Age{get;set;}
        }

    js:

            var woman = { Name: '刘亦菲', Age: 18 };
            $(function () {
                $('#btn').click(function () {
                    $.ajax({
                        type: "post",
                        url: "http://localhost:7601/api/values/GetData",
                        data:JSON.stringify(woman),
                        success: function (r) {
                            alert(r);
                        }
                    });
                });
            });
    

    结果:  

    过程和结果都非常简单。但这里面蕴含着一个巨大的坑,你如果做Attribute验证的话。后面讲到的时候再谈。

     如果Action的参数中含有一个简单类型和实体对象,形如

    [HttpPost]
            public string GetData(string name)
            {
                var stream = HttpContext.Current.Request.InputStream;
                byte[] byts = new byte[stream.Length];
                stream.Read(byts, 0, (int)stream.Length);
                //以UTF8形式获取数据
                string json = Encoding.UTF8.GetString(byts);
                Woman woman = JsonConvert.DeserializeObject<Woman>(json);
                return name + "喜欢" +woman.Age + "" + woman.Name;
            }
    只需要在js中将url: "http://localhost:7601/api/values/GetData" 改为 url: "http://localhost:7601/api/values/GetData?name=楼主"即可。则在Action中name参数和实体均能正确获得。
    由于比较简单,不再赘述。
    值得一提的是,此方法对于复杂类型的实体对象传递,也能非常好的支持。比如Man类型的实体。
        public class Person
        {
            public string Name { get; set; }
            public string Age { get; set; }
        }
        public class Man : Person
        {
            public Woman Wife { get; set; }
            public List<Woman> Lovers { get; set; }
        }
        public class Woman : Person
        {
            public int Height { get; set; }
            public List<DateTime> ExerciseTime { get; set; }
        }
  • 相关阅读:
    查询某段时间内过生日的员工名单的SQL语句
    Winform中如何读取局域网路由的IP地址
    什么是组件,组件有何特点?
    SQL 存储过程优化总结
    MVC文件结构作用概述(1)
    SQL常用总结
    IEnumerable与IEnumerator区别
    转谈工程师的价值和发展
    新建项目,是否勾选“为解决方案创建目录”的文件结构的区别
    [转]c# asp.net 新建项目与新建网站区别
  • 原文地址:https://www.cnblogs.com/luhuanong/p/4924170.html
Copyright © 2020-2023  润新知