How can I post a JSON array to a Web API? It's working for single object.
This is what I've tried, but the controller seems to be returning 0
rather than the expected 3
.
This is my 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 call:
$.ajax({
url: urlString,
type: 'POST',
data: sc,
dataType: 'json',
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
Web API controller:
[HttpPost]
public string PostProducts([FromBody]List<SyncingControl> persons)
{
return persons.Count.ToString(); // 0, expected 3
}
3 Answers 3
There is an error in the json Table_ID": "Allergy_Trns"
should be "Table_ID": "Allergy_Trns"
.
Missing double quote.
Update
You need to make sure that you are sending your parameters as json as follows:
$.ajax({
url: urlString,
type: 'POST',
data: JSON.stringify(sc),
dataType: 'json',
contentType: 'application/json',
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
Notice the JSON.stringify(sc)
, @herbi is partly correct too about specifying a content type.
Screen grab
**Screen grab**
-
hutchonoid: its missed here not in my code sorry for that.Ranvijay Singh– Ranvijay Singh2015年01月23日 09:54:47 +00:00Commented Jan 23, 2015 at 9:54
You have to add the content-type header to the ajax request, so that WebAPI is able to understand the request and use the correct formatter to deserialize the data:
$.ajax({
url: urlString,
type: 'POST',
data: sc,
dataType: 'json',
contentType: "application/json",
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
-
sorry, it is "contentType", not "content-Type"Herbi– Herbi2015年01月23日 10:31:30 +00:00Commented Jan 23, 2015 at 10:31
You can set the Content-Type on beforeSend which will insure that your json data matches with your server object
$.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); }
});
Explore related questions
See similar questions with these tags.
sc
equal tonull
before the request gets fired off, which seems like it could do this.