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

时间:2021-10-05 02:23:38

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 。

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

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