web-dev-qa-db-ger.com

wie man json object array auf ein web api postet

Wie kann ich ein JSON-Array an eine Web-API senden? Es funktioniert für ein einzelnes Objekt.

Ich habe es versucht, aber der Controller scheint 0 und nicht den erwarteten 3 zurückzugeben.

Das ist mein 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-Anruf:

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

Es gibt einen Fehler im json Table_ID": "Allergy_Trns" sollte "Table_ID": "Allergy_Trns" sein.

Doppelte Anführungszeichen fehlen.

Update

Sie müssen sicherstellen, dass Sie Ihre Parameter wie folgt als Json senden:

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

Beachten Sie, dass JSON.stringify(sc), @herbi die Angabe eines Inhaltstyps ebenfalls teilweise richtig ist.

Bildschirm greifen

**Screen grab**

17
hutchonoid

Sie müssen den Inhaltstypheader zur ajax-Anforderung hinzufügen, damit WebAPI die Anforderung verstehen und den richtigen Formatierer verwenden kann, um die Daten zu deserialisieren:

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

2
Herbi

Sie können den Inhaltstyp auf beforeSend setzen, um sicherzustellen, dass Ihre Json-Daten mit Ihrem Serverobjekt übereinstimmen

$.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