首页 > 代码库 > 使用ajax调用web Api 方法中出现的问题总结

使用ajax调用web Api 方法中出现的问题总结

一,Get请求

1,无参数Get请求,跟平常写ajax请求一样,并无什么差别

  $.ajax({
            url: ‘.../api/User/UserVerify,
            type: ‘get‘,
            success: function (json) {
                alert(json);
            },
            error: function () {
                alert("error");
            }
        });

此时,后台代码api代码可以直接public string UserVerify(){},需要在action上添加HttpGet特性

2,有一个或多个参数的Get请求

$.ajax({
            url: ‘.../api/User/UserVerify?loginName=admin&passWord=123456‘,
            type: ‘get‘,
            success: function (json) {
                alert(json);
            },
            error: function () {
                alert("erroe");
            }
        });

此时,后台Api代码可以public string LoginVerify(string loginName,string passWord){},需要在action上添加HttpGet特性

二,Post请求

1,无参数的Post请求

  $.post(
            ‘.../api/User/UserVerify‘,
           function (json) {
                alert(json);
            });

此时,后台调用需要在Action上添加HttpPost特性,   public string LoginVerify(){}

2,一个参数的Post请求

在post请求中,方法的参数必须要用 [FromBody] 属性来修饰才可以, [FromBody] 就告诉Web API 要从post请求体重去获取参数的值。也就是要写成如下形式:

 [HttpPost,ActionName("UserVerify")]
        public string LoginVerify([FromBody]string loginName){}

同时,前台调用时如果还是按之前的写法

$.post(
            ‘.../api/User/UserVerify‘,
            { loginName:"admin"},
           function (json) {
                alert(json);
            });

则会出现如下情况,即:可以正常跳转,可是获取不到相应传输的值。因为Web API 要求请求传递的 [FromBody] 参数,肯定是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。

技术分享

所以,接下来我们把调用参数修改为如下形式:

技术分享

需要注意的时,在此时一定要把服务重新生成

3,两个或多个参数的Post请求

[FromBody] 修饰的参数只能有一个。我们需要对传递的多个参数进行封装才行。

这里,我们可以将 loginName和 passWord 封装成一个User类

技术分享

 

后台方法需要

[HttpPost,ActionName("UserVerify")]
        public string LoginVerify([FromBody]UserExEntity user)
        {
            try
            {
                return "姓名" + user.loginName+"密码"+user.passWord;
            }
            catch
            {
                return null;
            }
        }

 

前台调用需要

技术分享

此时,我们可以看到Form Data 的格式是 key=value&key=value 这种表单数据格式,我们平时使用的比较多的一般为json格式。

 

技术分享

使用ajax调用web Api 方法中出现的问题总结