【WebAPI】WebAPI参数传递

Get请求返回参数类型

1.基础类型

前端请求:

//查询用户(登录验证)
$.ajax({
        type: "get",
        url: "http://localhost:1632/OrderSystem/User/Login",
        data: { userId:1, password: "1"},
        success: function (data, status) {
                alert(data);            
        }
});

后端返回:

// 查询用户是否存在
		[HttpGet]
        [Route("User/Login")]
        public string  Login(string userId, string password)
        {

            var list = new List<User>();
            list = userdal.selectByUserId(userId);
            if (list.Count > 0)
            {
        return "0000";// 查询成功

            }
            else
            {
        return "1111";// 查询失败
            }

2. list 参数

前端请求:

//查询用户信息

		$.ajax({
                type: "get",
                url: "http://localhost:1632/OrderSystem/User/selectByUserId",
                contentType: "application/json",
                data: { userId: "1" },
                success: function (data, status) {
               alert(data[0].userId,data[0].pasword);//如果很多条数据,用循环for-in

后端返回:

[HttpGet]
       [Route("User/selectByUserId/{userId}")] 

        public IHttpActionResult selectByUserId(string userId)
        {

            var list = new List<User>();
            list = userdal.selectByUserId(userId);
            return Json<List<User>>(list);

        }
 

3.实体 参数

前端请求:

//实体做参数传递(从前往后传)
            
            $.ajax({
                var :user={ userId: "2", password: "2" },
                type: "get",
                url: "http://localhost:1632/OrderSystem/User/Selectid/",
                contentType: "application/json",
                data: user,
                success: function (data, status) {
                    alert(data);
                }

            });

后端返回:

[HttpGet]
[Route("User/Selectid")]

        public string Selectid([FromUri] User user)
        {
            var list = new List<User>();
            list = userdal.selectByUserId(user.userId);
            if (list.Count > 0)
            {
                return "0000";
            }
            else
            {
                return "1111";
            }
            
        }

Post请求返回参数类型

1. 单个数据

前端请求:

$.ajax({
                type: "Post",
                url: "http://localhost:1632/OrderSystem/User/Selectid/",
                data: { "": "Jim" },
                success: function (data, status) {
                    alert(data);
                }
       });

后端返回:

  [HttpPost]
        public string SaveData([FromBody]string userId)
        {
            return userId; 
        }

2. 多个数据

2.1新建一个类去包含传递的参数,虽然可以,但是不够灵活(参考用实体接收)
2.2使用dynamic

前端请求:

 $.ajax({
                    type: "Post",
                    url: "http://localhost:1632/OrderSystem/User/Selectid/",
                    contentType: "application/json",
                    data: JSON.stringify({ userId: "2",password:"2" }),
                    success: function (data, status) {
                        alert(data);
                    }
    
                });

后端返回:


    [HttpPost]
    [Route("User/Select")]
     public object Select(dynamic obj)
     {
       Return   obj.userId; 
    }          

3、实体作为参数

3.1后台使用实体接收

前端请求:
前端传递的实体参数必须和后台接收的实体包含的参数一致 参数形式是 _userId

$.ajax({
                type: "Post",
                url: "http://localhost:1632/OrderSystem/User/Select/",
                contentType: "application/json",
                data: JSON.stringify({ _userId: "2", _password: "2" }),
                success: function (data, status) {
                    alert(data);

                }

            });

后端返回:

[HttpPost]
        [Route("User/Select")]

        public string Select(User user)
        {
            var list = new List<User>();
            list = userdal.selectByUserId(user.userId);
            if (list.Count > 0)
            {
               return "0000";//成功
             }
             else
             {
                return "1111";//失败
            }
            
        }
3.2后台使用dynamic接收

前端传递的参数随意,后台参数需要转换格式。注意:public object Select(dynamic obj)
前端请求:

$.ajax({
                type: "Post",
                url: "http://localhost:1632/OrderSystem/User/Select/",
                contentType: "application/json",
                data: JSON.stringify({ userId: "2", password: "2" }),
                success: function (data, status) {
                    alert(data);

                }

            });

后端返回:

		[HttpPost]
        [Route("User/Select")]

         public object Select(dynamic obj)
        {
            var strName = Convert.ToString(obj.userId);
var strpwd = Convert.ToString(obj.password);
            var list = new List<User>();
            list = userdal.selectByUserId(strName);
            if (list.Count > 0)
            {
                return "0000";
            }
            else
            {
                return "1111";
            }            
        }

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

前端请求:

$.ajax({
                var: user = { userId: "3", password: "4" },//实体user
                type: "Post",
                url: "http://localhost:1632/OrderSystem/User/Select/",
                contentType: "application/json",
                data: JSON.stringify({ userId: "2", aaa: user }),
                success: function (data, status) {
                    alert(data);
                }
            });

后端返回:

 		[HttpPost]
        [Route("User/Select")]

        public object Select(dynamic obj)
        {

            return obj.userId; //返回“2”
            return obj.aaa;	//是以object返回的
}

4、数组作为参数

(1)基础类型数组

前端请求:

  var arr = ["1", "2", "3", "4"];
    $.ajax({
        type: "post",
        url: "http://localhost:27221/api/Charging/SaveData",
        contentType: 'application/json',
        data: JSON.stringify(arr),
        success: function (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',
        data: JSON.stringify(arr),
        success: function (data, status) {}
    });

后端代码:

 [HttpPost]
        public bool SaveData(List<TB_CHARGING> lstCharging)
        {
            return true;
        }

WebApi返回Json格式字符串

5.1、(改配置法)

WebAPI 默认返回参数是XML 或者Jason格式的。我们可以在 App_Start目录下的WebApiConfig.cs文件中添加下面的4行代码,只返回Jason格式。

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            
            // Web API 配置和服务
            config.Formatters.Remove(config.Formatters.XmlFormatter);//去掉默认的XML格式
            var jsonFormatter = config.Formatters.JsonFormatter;
            jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;//输出结果缩进显示
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            //将字段名称改成camelCase格式
       }
   }

这样返回的结果就都是json类型了,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123";
解决的方法是自定义返回类型(返回类型为HttpResponseMessage)

public HttpResponseMessage PostUserName(User user) 
{ 
    String userName = user.userName; 
    var result = new HttpResponseMessage{ Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json")}; 
    return result; 
}

5.2、(万金油法)

方法一中又要改配置,又要处理返回值为String类型的json,甚是麻烦,不如就不用webapi中的的自动序列化对象,自己序列化后再返回

public HttpResponseMessage PostUser(User user) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    string str = serializer.Serialize(user); 
    HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
    return result; 
}

为了不在每个接口中都反复写那几句代码,所以就封装为一个方法这样使用就方便多了。

public static HttpResponseMessage toJson(Object obj) 
{ 
    String str; 
    if (obj is String ||obj is Char) 
    { 
        str = obj.ToString(); 
    } 
    else 
    { 
        JavaScriptSerializer serializer = new JavaScriptSerializer(); 
        str = serializer.Serialize(obj); 
    } 
    HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
    return result; 
}   

Ajax:简单使用

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="jquery-1.7.2.min.js"></script>   //引入jQuery文件包
</head>
<body>
   用户ID: <input type="text" id="userId" name="用户ID"/>
    密码:<input type="text" id="password" name="密码" />
    <input type="button" id="btn" name="submit" value="提交" onclick="click"/>
    <script type="text/javascript">
        $("#btn").click(function () {
            var userId = $("#userId").val();
            var pwd = $("#password").val();
$.ajax({
        type: "get",
        url: "http://localhost:1632/OrderSystem/User/selectByUserId",
        contentType: "application/json",
async: true,//异步请求,默认为true。如果需要发送同步请求发送false
        data: { userId: userId, password: pwd },
        success: function (data, status) {
        alert(data);
               }
});
});

</script>
</body>
</html>
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值