如何将json对象数组发布到web api

如何将JSON数组发布到Web API? 它适用于单个对象。

这是我尝试过的,但控制器似乎返回0而不是预期的3

这是我的JSON:

 var sc = [{ "ID": "5", "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a", "Table_ID": "Allergy_Trns", "Checksum": "-475090533", "LastModified": "2015-01-22T20:08:52.013" }, { "ID": "5", "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a", "Table_ID": "Allergy_Trns", "Checksum": "-475090533", "LastModified": "2015-01-22T20:08:52.013" }, { "ID": "5", "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a", "Table_ID": "Allergy_Trns", "Checksum": "-475090533", "LastModified": "2015-01-22T20:08:52.013" }]; 

AJAX电话:

 $.ajax({ url: urlString, type: 'POST', data: sc, dataType: 'json', crossDomain: true, cache: false, success: function (data) { console.log(data); } }); 

Web API控制器:

 [HttpPost] public string PostProducts([FromBody]List persons) { return persons.Count.ToString(); // 0, expected 3 } 

在json Table_ID": "Allergy_Trns"出现错误Table_ID": "Allergy_Trns"应为"Table_ID": "Allergy_Trns"

缺少双引号。

更新

您需要确保将参数发送为json,如下所示:

  $.ajax({ url: urlString, type: 'POST', data: JSON.stringify(sc), dataType: 'json', contentType: 'application/json', crossDomain: true, cache: false, success: function (data) { console.log(data); } }); 

注意JSON.stringify(sc) ,@ ethbi在指定内容类型方面也是部分正确的。

屏幕抓取

**屏幕抓取**

您必须将内容类型标头添加到ajax请求,以便WebAPI能够理解请求并使用正确的格式化程序来反序列化数据:

 $.ajax({ url: urlString, type: 'POST', data: sc, dataType: 'json', contentType: "application/json", crossDomain: true, cache: false, success: function (data) { console.log(data); } }); 

您可以在beforeSend上设置Content-Type,以确保您的json数据与您的服务器对象匹配

 $.ajax({ beforeSend: function (xhr) { xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); }, url: urlString, type: 'POST', data: sc, dataType: 'json', contentType: "application/json", crossDomain: true, cache: false, success: function (data) { console.log(data); } });