首页 > 代码库 > 使用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 方法中出现的问题总结