jq向webApi提交post json数据
在页面想webApi post json数据的时候,发现webapi不能直接以json的方式接受数据(注:我是没有发现一个很好的方式来post json数据的);但是可以以数据结构的方式传递;
如下:
1 //js代码
var d = { 2 Id: "1", 3 Name: "name", 4 Value: "OldValue",}; 8 $.ajax({ 9 type: "post", 10 url: url1, 11 data: JSON.stringify(d), 13 14 success:function(d){ 15 16 } 17 });
1 public class Diff 2 { 3 public string Id { set; get; } 4 public string Name { set; get; } 5 public string Value { set; get; } 6 } 7 public Diff post([FromBody]Diff pConfig) 8 { 9 List<DiffConfig> s = pConfig; 10 return s; 11 }
像这样的代码是没有问题的;得到的是一个标准结构的数据;
但是如果改为下面的代码,就会发现没有数据
1 //js代码 2 var d = [{ 3 Id: "1", 4 Name: "name", 5 Value: "Value", 6 },{ 7 Id: "2", 8 Name: "name2", 9 Value: "Value2", 10 }]; 11 $.ajax({ 12 type: "post", 13 url: url1, 14 data: JSON.stringify({ 15 pConfig: d 16 }), 17 success:function(d){ 18 19 } 20 });
1 public List<Diff> post([FromBody]List<Diff> diff) 2 { 3 List<Diff> d = diff; 4 return d; 5 }
这样的代码会发现,数据没有传过来,后面才发现,原来jq的ajax传输数据类型有问题;传输的数据类型contentType的默认值为 "application/x-www-form-urlencoded"。默认值适合大多数情况。但是却不能适应这次传输的值,把 contentType: 'application/json' 设置一下,还有就是,要注意的是直接把数组通过 json.stringify 传递过去( data:JSON.stringify(d), ),而不是想上面那种画蛇添足的加上一句(data:JSON.stringify( {pConfig:d}) ),这样就可以ok了;数据传输完全没有问题;
$.ajax({ type: "post", dataType: 'json', url: url, contentType: 'application/json', data: JSON.stringify(d), success: function (d) { } });
内容为小七在工作中遇到或在其他地方看到所做的总结,方便以后查看,仅供学习使用;
转载请注明出处;