web-dev-qa-db-ja.com

MVC Web APIを使用したオブジェクトの配列の投稿

RecordIemの単一オブジェクトで動作する基本的なpost操作があります。私がやりたいのは、同じフォーマットを使用してリクエストの配列を投稿することにより、同じアクションを一括して行うことです。

例えば:

public HttpResponseMessage Post(RecordItem request)
{
    var recordItems = _recorder.RecordItem(request);
    return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}

そして、Jsonを投稿するとき:

{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
}

すべてが正常に動作します。次のようなJsonを投稿したいと思います。

{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
},
{
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM",
    System : 1,
    Environment : "Production",
    Label : "RestTest1"
},
{
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k",
    System : 1,
    Environment : "Production"
}

そして、以下に似た方法でこれを拾います:

public HttpResponseMessage Post(RecordItem[] request)
{
    var recordItems = _recorder.RecordItems(request);
    return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}

配列で[FromBody]属性と[ModelBinding]属性の両方を使用してみて、異なるタイプ(List、IList、IEnumerable)を使用しようとしましたが、役に立ちませんでした。 [FromBody]を使用する場合、要求パラメーターはnullであり、[ModelBinding]を使用する場合、リストは空です。両方を使用してみましたが、どちらも機能しません。

クライアントで単一の投稿をループすることに頼る必要はありません。

ありがとう

26
brimble2010

PostRecordItem[]、リクエスト本文のJSONコンテンツも配列にある必要があります。

あなたが持っているものはかなり近いです-角括弧のペアを追加してみてください[]データの周り:

[{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
},
{
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM",
    System : 1,
    Environment : "Production",
    Label : "RestTest1"
},
{
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k",
    System : 1,
    Environment : "Production"
}]
20
Maggie Ying

試しに何でも空の配列を取得するために、これを試してください:

var request = $.ajax({
  dataType: "json",
  url: "/api/users",
  method: "POST",
  data: { '': postData}
});

データは、生の配列ではなく、単一の匿名オブジェクトである必要があります。

情報が見つかりました ここ

22
Oliver Kötter

Jsonにrequestパラメーター名が含まれていることが重要です。その他の注意:配列として投稿する必要があります。

Jsonは次のようになります。

{
    "request": [
        {
            "Id": "...",
            "System": 1,
            ...
        },
        { ... }
    ]
}
2
Rob