分享

WebApi接口传参不再困惑(4):传参详解(下)

 weijianian 2016-08-07


来源:懒得安分

链接:http://www.cnblogs.com/landeanfen/p/5337072.html


3、数组作为参数


(1)基础类型数组


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

    $.ajax({

        type'post',

        url'http://localhost:27221/api/Charging/SaveData',

        contentType'application/json',

        dataJSON.stringify(arr),

        successfunction (data, status) { }

    });


 [HttpPost]

    public bool SaveData(string[] ids)

    {

         return true;

    }


得到结果:



(2)实体集合


var arr = [

        { ID'1', NAME'Jim', CREATETIME'1988-09-11' },

        { ID'2', NAME'Lilei', CREATETIME'1990-12-11' },

        { ID'3', NAME'Lucy', CREATETIME'1986-01-10' }

    ];

    $.ajax({

        type'post',

        url'http://localhost:27221/api/Charging/SaveData',

        contentType'application/json',

        dataJSON.stringify(arr),

        successfunction (data, status) {}

    });


[HttpPost]

    public bool SaveData(List lstCharging)

    {

       return true;

    }


得到结果:



4、后台发送请求参数的传递


上面写了那么多,都是通过前端的ajax请求去做的,我们知道,如果调用方不是web项目,比如Android客户端,可能需要从后台发送http请求来调用我们的接口方法,如果我们通过后台去发送请求是否也是可行的呢?我们以实体对象作为参数来传递写写代码试一把。


public void TestReques()

    {

         //请求路径

            string url = 'http://localhost:27221/api/Charging/SaveData';

 

            //定义request并设置request的路径

            WebRequest request = WebRequest.Create(url);

            request.Method = 'post';

 

            //初始化request参数

            string postData = '{ ID: \'1\', NAME: \'Jim\', CREATETIME: \'1988-09-11\' }';

 

            //设置参数的编码格式,解决中文乱码

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

 

            //设置request的MIME类型及内容长度

            request.ContentType = 'application/json';

            request.ContentLength = byteArray.Length;

 

            //打开request字符流

            Stream dataStream = request.GetRequestStream();

            dataStream.Write(byteArray, 0, byteArray.Length);

            dataStream.Close();

 

            //定义response为前面的request响应

            WebResponse response = request.GetResponse();

 

            //获取相应的状态代码

            Console.WriteLine(((HttpWebResponse)response).StatusDescription);

 

            //定义response字符流

            dataStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(dataStream);

            string responseFromServer = reader.ReadToEnd();//读取所有

            Console.WriteLine(responseFromServer);

 }


当代码运行到request.GetResponse()这一句的时候,API里面进入断点



尝试成功。


三、put请求


WebApi里面put请求一般用于对象的更新。它和用法和post请求基本相同。同样支持[FromBody],同样可以使用dynamic。


1、基础类型参数


$.ajax({

        type'put',

        url'http://localhost:27221/api/Charging/Update',

        contentType'application/json',

        dataJSON.stringify({ ID'1' }),

        successfunction (data, status) {}

    });


[HttpPut]

   public bool Update(dynamic obj )

   {

      return true;

   }



2、实体作为参数


和post请求相同。


3、数组作为参数


和post请求相同。


四、delete请求


顾名思义,delete请求肯定是用于删除操作的。参数传递机制和post也是基本相同。下面简单给出一个例子,其他情况参考post请求。


var arr = [

        { ID: '1', NAME: 'Jim', CREATETIME: '1988-09-11' },

        { ID: '2', NAME: 'Lilei', CREATETIME: '1990-12-11' },

        { ID: '3', NAME: 'Lucy', CREATETIME: '1986-01-10' }

    ];

    $.ajax({

        type: 'delete',

        url: 'http://localhost:27221/api/Charging/OptDelete',

        contentType: 'application/json',

        data: JSON.stringify(arr),

        success: function (data, status) {}

    });


 [HttpDelete]

    public bool OptDelete(List lstChargin)

    {

       return true;

     }



五、总结


以上比较详细的总结了WebApi各种请求的各种参数传递。每种情况都是博主实际代码测试过的,内容不难,但如果刚接触这么些东西还是需要一点时间去熟悉的,在此做个总结,希望能帮到刚刚接触WebApi的园友们。


WebAPI系列文章:





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多