web-dev-qa-db-fra.com

comment publier un tableau d'objets JSON sur une API Web

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
}
14
Ranvijay Singh

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

**Screen grab**

17
hutchonoid

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); }
        });

2
Herbi

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); }
        });
0
Michael Galloway