web-dev-qa-db-ja.com

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<SyncingControl> persons)
{
    return persons.Count.ToString(); // 0, expected 3
}
16
Ranvijay Singh

Jsonにエラーがあります_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)、@ herbiは、コンテンツタイプの指定についても部分的に正しいことに注意してください。

画面の取り込み

**Screen grab**

17
hutchonoid

WebAPIがリクエストを理解し、正しいフォーマッターを使用してデータをデシリアライズできるように、コンテンツタイプヘッダーをajaxリクエストに追加する必要があります。

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

Content TypeをbeforeSendに設定すると、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); }
        });
1