Comment puis-je publier un tableau JSON sur une API Web? Cela fonctionne pour un seul objet.
C'est ce que j'ai essayé, mais le contrôleur semble renvoyer 0
plutôt que le 3
attendu.
C'est mon 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"
}];
Appel AJAX:
$.ajax({
url: urlString,
type: 'POST',
data: sc,
dataType: 'json',
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
Contrôleur API Web:
[HttpPost]
public string PostProducts([FromBody]List<SyncingControl> persons)
{
return persons.Count.ToString(); // 0, expected 3
}
Il y a une erreur dans le json Table_ID": "Allergy_Trns"
devrait être "Table_ID": "Allergy_Trns"
.
Citation double manquante.
Mettre à jour
Vous devez vous assurer que vous envoyez vos paramètres en json comme suit:
$.ajax({
url: urlString,
type: 'POST',
data: JSON.stringify(sc),
dataType: 'json',
contentType: 'application/json',
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
Notez que JSON.stringify(sc)
, @herbi est également en partie correct pour spécifier un type de contenu.
Capture d'écran
Vous devez ajouter l'en-tête content-type à la requête ajax afin que WebAPI puisse la comprendre et utiliser le formateur approprié pour désérialiser les données:
$.ajax({
url: urlString,
type: 'POST',
data: sc,
dataType: 'json',
contentType: "application/json",
crossDomain: true,
cache: false,
success: function (data) { console.log(data); }
});
Vous pouvez définir le type de contenu sur beforeSend , ce qui garantira que vos données json correspondent à votre objet serveur
$.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); }
});