您的位置:澳门402永利com > 关于计算机 > post央浼中的参数,get哀求中的参数

post央浼中的参数,get哀求中的参数

发布时间:2019-11-07 00:04编辑:关于计算机浏览(75)

    (二卡塔尔Asp.net web api中的坑-【http get诉求中的参数】,asp.netapi

      webapi主要的用途就是把【指定的参数】传进【api后台】,api接收到参数,进行【相应的业务逻辑处理】,【返回结果】。所以怎么传参,或者通俗的说,http请求应该怎么请求api,api后台应该怎么写,才能准确的接收到参数。
    HttpGet 请求
    1、get请求,单参数
    前端ajax
           var url = 'api/EnterOrExit/test';
           var para = {};
           para["Phone"] = "phone13880825221";
           para["UID"] = "uid287572292";
           $.get(url, para, function () { }, "application/json");
    后端
            [HttpGet]
            public IHttpActionResult GetData2(string Phone)
            {
                string result = "接口通了";
                return Ok<string>(result);
            }
    经调试,后端Phone="phone13880825221",传参成功。
    **********************************************************************************
    2、get请求,传多个参数
    
    
    前端ajax
           var url = 'api/EnterOrExit/test';
           var para = {};
           para["Phone"] = "phone13880825221";
           para["UID"] = "uid287572292";
           $.get(url, para, function () { }, "application/json");
    后端
    [HttpGet]
            public IHttpActionResult GetData2(string Phone,string UID)
            {
                string result = "接口通了";
                return Ok<string>(result);
            }
    经调试,后端Phone="phone13880825221",UID="uid287572292"; 传参成功。
    ps,后端参数名称,无论你是写phone,PhOne,Uid,uid,uId,你都可以接收到前端ajax请求传递的参数,这个是忽略大小写的。
    **********************************************************************************
    3、get请求,传实体
    前端ajax
           var url = 'api/EnterOrExit/test';
           var para = {};
           para["Phone"] = "phone13880825221";
           para["UID"] = "uid287572292";
           $.get(url, para, function () { }, "application/json");
    后端
    [HttpGet]
            public IHttpActionResult GetData2(RequestModel model)
            { 
                string msg = "";
                string code = "";
                string result = "接口通了";
                return Ok<string>(result);
            }
    经调试,RequestModel =null,纳尼?咋回事呢?来,firefox抓包,瞅一下,
    
    嗦嘎,get请求的时候,默认是将参数全部放到了url里面直接以string的形式传递的,后台自然接不到了。!!string形式,哦,是不是很容易就想到了一个思路?把json对象序列化为json字符串,后台接收到这个json格式字符串,再反序列化成一个实体,这也是一种解决方法。
    前端ajax
           var url = 'api/EnterOrExit/test';
           var para = {};
           para["Phone"] = "phone13880825221";
           para["UID"] = "uid287572292";
           var requestStr=JSON.stringify(para);
           $.get(url, requestStr, function () { }, "application/json");
    后端
    [HttpGet]
            public IHttpActionResult GetData2(string requestStr)
            { 
                var model= Newtonsoft.Json.JsonConvert.DeserializeObject<TB_RequestModel>(requestStr);
                string msg = "";
                string code = "";
                string result = "接口通了";
                return Ok<string>(result);
            }
    这是一种方式,当然还有更佳,更好的方法,根据查园子里的大神的博客,知道Get请求的时候可以在参数里面加上[FromUri]即可直接得到对象。
    前端ajax
           var url = 'api/EnterOrExit/test';
           var para = {};
           para["Phone"] = "phone13880825221";
           para["UID"] = "uid287572292";  
           $.get(url, para , function () { }, "application/json");
    后端
          [HttpGet]
          public IHttpActionResult test([FromUri]RequestModel model)
          {
              string msg = "";
              string code = "";
              string result = "接口通了";
              return Ok<string>(result);
          }
    经测试,model不为空,且能获取值。
    
    
    ——————————————————————————————————————————————————————
    
    
     
    
    
    知识点:HTTP协议中get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),而post请求则是放在http协议包的包体中。
    

    web api中的坑-【http get央求中的参数】,asp.netapi webapi首要的用场正是把【钦定的参数】传进【api后台】,api接纳到参数,举办...

    (三卡塔尔Asp.net web api中的坑-【http post央浼中的参数】,asp.netapi

    接上篇,
    

    HttpPost 请求

    1、post请求,单参数

    前端
    
     var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para["Phone"] = "phone13880825221";
     para["UID"] = "uid287572292";
     $.post(url, para, function () { }, "application/json");
    后端
    [HttpPost]
            public IHttpActionResult GetData2(string phone)
            {
                string result = "接口通了";
                return Ok<string>(result);
            }
     
    
    这个,这个他妈的又来一个妖怪,为啥呢,这跟get差不多呀,咋就接不到了,
    哦,还记得上篇的知识点麽?HTTP协议中get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),而post请求则是放在http协议包的包体中,
    
    上篇的get请求中,传递实体时,[FromUri]-因为get请求,参数数据放置在HTTP协议头中,而post放在http协议包的包体中,如上图,推断出肯定有个[FromBody]之类的,事实胜于吹牛,试试再说,
    前端
    
     var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para["Phone"] = "phone13880825221";
     para["UID"] = "uid287572292";
     $.post(url, para, function () { }, "application/json");
    后端
    [HttpPost]
            public IHttpActionResult GetData2([FromBody]string phone)
            {
                string result = "接口通了";
                return Ok<string>(result);
            }
    yeah,断点进action,but,phone=null,为啥呢,查阅相关大神写的博客,通过url取参数的机制是键值对,即某一个key等于某一个value,而这里的FromBody和我们一般通过url取参数的机制则不同,它的机制是=value,单个参数,大神说要这么改,
    前端
    
     var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para[""] = "phone13880825221";
     $.post(url, para, function () { }, "application/json");
    后端不变,好吧,phone确实能收到值了。
     
    

    ************************************************************************************

    2、post须要,七个参数

    既然如此post从呼吁主体中取参数的机制与get从url中取参数的体制分化,post为=value,

    请求多参数-转换为请求实体-转换为请求单参数问题,
    多参数包装成实体类,实体类包装成json字符串格式
    前端
     var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para[""] = "phone13880825221";
     para["UID"] = "uid287572292";
     var str = JSON.stringify(para);
     var data= {“”,str } 
    $.post(url, data, function () { }, "application/json");
    后端
    
    [HttpPost]
            public IHttpActionResult GetData2([FromBody]string requestStr)
            {
                var model= Newtonsoft.Json.JsonConvert.DeserializeObject<TB_RequestModel>(requestStr);
                string result = "接口通了";
                return Ok<string>(result);
            }
    requestStr获取到json格式字符串,再反序列化为实体,即可。
    如果我们前后台每次传递多个参数的post请求,每次都需要修改实体,对于不经常修改的参数,当然上面的方法已经足够,每次参数在变化,大神提供了一种解决方法,
    前端
    var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para[""] = "phone13880825221";
     para["UID"] = "uid287572292";
     var data= JSON.stringify(para);
    $.post(url, data, function () { }, "application/json");
    后端
    [HttpPost]
     public object GetData2(dynamic obj)
     {
         var UID= Convert.ToString(obj.UID);          
    

            string result = "接口通了";
            return Ok<string>(result);

     }
    

    有一点亟需注意的是此处在ajax的号召里面需求加多参数类型为Json,即 contentType: 'application/json', 这一个特性,那是ajax诉求,request content-type,前面笔者还恐怕会讲到response的content-type。

    ---------------------------------------------------------------------------------------------------------------------
    3、post请求,实体参数
    使用实体作为参数的时候,前端直接传递普通json,后台直接使用对应的类型去接收即可,不用FromBody。但是这里需要注意的一点就是,这里不能指定contentType为appplication/json,否则,参数无法传递到后台。httppost,request请求中默认的contentType:application/x-www-form-urlencoded,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
    前端:
    var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para[""] = "phone13880825221";
     para["UID"] = "uid287572292";
    $.post(url, data, function () { });
    后端:
    [HttpPost]
     public IHttpActionResult test(RequestModel model)
     {
               string msg = "";
               string code = "";
               string result = "接口通了";
               return Ok<string>(result);
    }
    

    model不为空,且各属性有值

    ps,介意下面前端代码,$.post(url, data, function () { });未有一点名request的content-type,

    post供给暗中认可是将表单里面包车型地铁数指标key/value方式发送到服务,而大家的服务器只必要有对应的key/value属性值的对象就足以摄取到。而豆蔻梢头旦利用application/json,则代表将前端的数量以系列化过的json传递到后端,后端要把它形成实体对象,还需求一个反体系化的历程。根据这一个逻辑,那我们只要内定contentType为application/json,然后传递体系化过的靶子应当也是足以的哎。

    所以下面这种方式,也是可以的,
    前端:
    var url = 'api/EnterOrExit/GetData2';
     var para = {};
     para[""] = "phone13880825221";
     para["UID"] = "uid287572292";
    $.post(url, data, function () { },"application/json”);
    后端:
    [HttpPost]
     public IHttpActionResult test(RequestModel model)
     {
               string msg = "";
               string code = "";
               string result = "接口通了";
               return Ok<string>(result);
    }
    总结知识点:在http请求中,如果你指定了contentType为application/json,则必须要传递序列化过的对象;如果使用post请求的默认参数类型,则前端直接传递json类型的对象即可。
    
    Post请求api,还有几种特别的,数组,集合,但是由于本人没有在工作中使用,所以没有发言权,不过使用方式都是上面的基本参数演变过来的,搞清楚原理和门路,相信使用的人可以应付多种参数请求的需求。
    

    web api中的坑-【http post央浼中的参数】,asp.netapi 接上篇, HttpPost 央求1、post诉求,单参数 前端 var url = 'api/EnterOrExit/GetData2'...

    本文由澳门402永利com发布于关于计算机,转载请注明出处:post央浼中的参数,get哀求中的参数

    关键词:

上一篇:没有了

下一篇:没有了