本人对webapi尚没有深入研究,初次接触发现了在数据请求时的几点现象。
先切入代码
1.如果action中开头带有Get默认就是get方式,不带Get默认就是post方式
public string GetUsers0(string id) { List<UserProfile> list = UserProfileBiz.GetBatchTest() as List<UserProfile>; //返回json字符串 return JsonConvert.SerializeObject(list); } $(function () { $.ajax({ url: "http://localhost:6556/api/User/GetUsers0", type: "get", dataType: "json", data: {"ID":"1"}, beforeSend: function (XMLHttpRequest) { }, success: function (data, status) { $(data).each(function () { alert(this.UserName); }); }, complete: function (data, status) { }, error: function () { } }); });
get方式可以请求到值,ID得大小写问题可以忽略,但是如果改成post方式,当然就请求不到了
如果改成post方式请求
就必须
[HttpPost] public string GetUsers0([FromBody]string id) { List<UserProfile> list = UserProfileBiz.GetBatchTest() as List<UserProfile>; //返回json字符串 return JsonConvert.SerializeObject(list); }
现在讲action改成任意不带Get开头的,然后用get方式请求发现请求不到,这是因为action默认已变成post请求的方式,改成post后,没有问题
public string MyUsers0([FromBody]string id) { List<UserProfile> list = UserProfileBiz.GetBatchTest() as List<UserProfile>; //返回json字符串 return JsonConvert.SerializeObject(list); } $.ajax({ url: "http://localhost:6556/api/User/MyUsers0", type: "post", dataType: "json", data: {"ID":"1"}, beforeSend: function (XMLHttpRequest) { }, success: function (data, status) { $(data).each(function () { alert(this.UserName); }); }, complete: function (data, status) { }, error: function () { } });
但是依旧需要一个FromBody特性声明,针对非对象类型的传值方式
如果改成实体参数会是什么情况呢
public string MyUsers0(UserProfile user) { List<UserProfile> list = UserProfileBiz.GetBatchTest() as List<UserProfile>; //返回json字符串 return JsonConvert.SerializeObject(list); }
对于实体类型参数并不需要声明FromBody特性了。
至于为什么需要继续探究。