zoukankan      html  css  js  c++  java
  • web api学习记录一之数据传输

    web api名词解释

    提供基于RESTFUL架构的web服务,通过HTTP请求方法(GET、PUT、POST、DElETE)映射到服务器端相应的ACTION方法(CRUD)

    是一个框架可以轻松构建http服务覆盖广泛的客户端,包括浏览器和移动设备,webapi是在.netFramwork上构建restful程序的理想平台

    web api 路由

    在webapi中,默认路由机制是通过解析http请求的类型来匹配Action,也就是说WebAip默认路由不需要指定Action的名称。比如:/api/User,这个url表示匹配User控制器下的【HttpGet】方法,/api是固定必填值,这是路由的默认的解析方式。

      
    public static void Register(HttpConfiguration config)

    {

        // Web API 路由

        config.MapHttpAttributeRoutes();

     

        config.Routes.MapHttpRoute(

            name: "DefaultApi",

            routeTemplate: "api/{controller}/{id}",

            defaults: new { id = RouteParameter.Optional }

        );

     

    mvc 和webapi路由区别

    1.在mvc中默认路由机制是通过url路径来匹配Action.比如:/User/GetList,这个url

    表示匹配User控制器下的GetList方法,这是MVC路由的默认解析方式。

    WebApi的默认路由机制通过http请求的类型匹配Action

    2.webApi的路由配置文件是WebApiConfig.cs,MVC的路由配置文件是RouteConfig.cs

    3.WebApi的Controller继承自Web.http.ApiController,MVC的Controller继续自Web.Mvc.Controller

    注:若Controller中有多个请求类型相同、参数相同、方法名不同的方法、那个webApi的默认路由机制就不够用了

    Web api的传参数

    Get请求

    方法名以Get开头,WebApi会自动默认这个请求就是get请求,而如果你以其他名称开头而又不标注方法的请求方式,那么这个时候服务器虽然找到了这个方法,但是由于请求方式不确定,所以直接返回给你405——方法不被允许的错误。

    1. 基础类型参数

      public class Student

        {

            public int Id { get; set; }

            public string Name { get; set; }

            public int Age { get; set; }

            public string  Address {get;set;}

    }

       $(function () {

                $.ajax({

                    type:'Get',

                url: '/api/Study',

                data: { Name: 'sy',age:11},

                success: function (data, staus) {

                    if (staus == "success") {

                        $('#studentID').html(data);

                       

                    }

                }

            })

     

            })

    [HttpGet]

            public string GetStudent(int Age, string Name)

            {

     

                return "Name:" + Name + "Age:" + Age;

     

     

            }

    2.实体作为参数

    get请求时,我们直接将json对象当做实体传递后台,后台是接收不到的

    Get请求的时候可以在参数里面加上[FromUri]即可直接得到对象       

     

    $(function () {
    
                $.ajax({
    
                    type:'Get',
    
                url: '/api/Study',
    
                data: { Name: 'sy',age:11,address:"赣州" ,id:12},
    
                success: function (data, staus) {
    
                    if (staus == "success") {
    
                        $('#studentID').html(data);
    
                       
    
                    }
    
                }
    
            })
    
     
    
            })
    
     
    
            [HttpGet]
    
            public string GetStudent([FromUri]Student stu) {
    
                return stu.Id.ToString();
    
            }
    

      

     

    3.数组

    Post请求

    1. 基础类型参数

    我们一般的通过url取参数的机制是键值对,即某一个key等于某一个value,而这里的FromBody和我们一般通过url取参数的机制则不同,它的机制是=value,没有key的概念,并且如果你写了key(比如你的ajax参数写的{NAME:"Jim"}),后台反而得到的NAME等于null

         $(function () {

                $.ajax({

                    type:'Post',

                url: '/api/Study',

                data: { '': 'sy'},

                success: function (data, staus) {

                    if (staus == "success") {

                        $('#studentID').html(data);

                     

                    }

                }

            })

            })

      

               [HttpPost]

            public string GetStudent([FromBody]string Name) {

                return Name;

            }

    多个基础类型的数据

    很多的解决办法是新建一个类去包含传递的参数,感觉不太好,因为如果我们前后台每次传递多个参数的post请求都去新建一个类的话,我们系统到时候会有多少个这种参数类?

    通过dynamic动态类型 contentType: 'application/json'这个要加上

      [HttpPost]

            public string GetStudent(dynamic stu) {

     

     

                return stu.Address;

     

            }

       $(function () {

                $.ajax({

                    type: 'Post',

                    contentType: 'application/json',

                url: '/api/Study',

                data: JSON.stringify({ Name: 'sy',Age:25,Address:"赣州"}),

                success: function (data, staus) {

                    if (staus == "success") {

                        $('#studentID').html(data);

                       

                    }

                }

            })

     

            })

    1. 实体作为参数

    如果你指定了contentType为application/json,则必须要传递序列化过的对象;如果使用post请求的默认参数类型,则前端直接传递json类型的对象即可。

          $(function () {

                $.ajax({

                    type: 'Post',

                    contentType: 'application/json',

                url: '/api/Study',

                data: JSON.stringify({ Name: 'sy',Age:25,Address:"赣州"}),

                success: function (data, staus) {

                    if (staus == "success") {

                        $('#studentID').html(data);

                       

                    }

                }

            })

     

            })

           [HttpPost]

            public string GetStudent(Student stu) {

     

     

                return stu.Address;

     

            }

    默认参数类型contentType

          $(function () {

                $.ajax({

                    type: 'Post',

                    url: '/api/Study',

                    data: { Name: 'sy', Age: 25, Address: "赣州" },

                    success: function (data, staus) {

                        if (staus == "success") {

                            $('#studentID').html(data);

     

                        }

                    }

                })

     

            })

       [HttpPost]

            public string GetStudent(Student stu) {

     

     

                return stu.Address;

     

            }

    实体和基础类型一起作为参数传递

     

    神奇的dynamic又派上用场了

    $(function () {

     

                var datas = { Name: 'sy', Age: 25, Address: "赣州" };

                $.ajax({

                    type: 'Post',

                    contentType: 'application/json',

                url: '/api/Study',

                    data: JSON.stringify({ Name2: 'kfz', StrData: datas }),

                success: function (data, staus) {

                    if (staus == "success") {

                        $('#studentID').html(data);

                       

                    }

                }

            })

     

            })

       [HttpPost]

            public string GetStudent(dynamic stu)

            {

     

                 var oCharging = Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(Convert.ToString(stu.StrData));

                return stu.Name2  + "==="+oCharging.Name;

     

            }

     

     

    数组作为参数

      $(function () {

     

                var arr = ["1", "2", "3", "4"];

                $.ajax({

                    type: "post",

                    url: '/api/Study',

                    contentType: 'application/json',

                    data: JSON.stringify(arr),

                    success: function (data, status) {

     

                        $('#studentID').html(data);

                    }

                });

     

            })

         [HttpPost]

            public string GetStudent(string [] stu) {

     

     

               return stu[0];

     

            }

    实体集合

      $(function () {

     

                var arr = [

                    { ID: "1", NAME: "fff", age: "2020" },

                    { ID: "2", NAME: "sss", age: "1994" },

                    { ID: "3", NAME: "xxxx", age: "1995" }

                ];

                $.ajax({

                    type: "post",

                    url: '/api/Study',

                    contentType: 'application/json',

                    data: JSON.stringify(arr),

                    success: function (data, status) {

     

                        $('#studentID').html(data);

                    }

                });

     

            })

              

      [HttpPost]

            public string GetStudent(List<Student> stu) {

     

     

               return stu[0].Name;

     

            }

    Put请求

    它和用法和post请求基本相同

    Delete请求

    参数传递机制和post也是基本相同

  • 相关阅读:
    爬取全部的校园新闻
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作,英文词频统计预处理
    大数据应用期末总评
    分布式文件系统HDFS 练习
    Hadoop的安装
    爬虫综合大作业
    爬取全部的校园新闻
  • 原文地址:https://www.cnblogs.com/Vinkong/p/13973241.html
Copyright © 2011-2022 走看看