29

の単一のオブジェクトで機能する基本的な投稿操作がありRecordIemます。私がやりたいのは、同じアクションを実行することですが、同じ形式を使用してリクエストの配列を投稿することでまとめて実行します。

例えば:

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]は空です。私は両方を使用しようとしましたが、どちらもうまくいきません。

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

ありがとう

4

3 に答える 3

24

何をしようとしても空の配列を取得するだけの場合は、これを試してください。

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

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

情報はこちらで見つかりました。

于 2014-10-01T11:52:06.017 に答える
21

Postが期待されるためRecordItem[]、リクエスト本文の 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"
}]
于 2013-04-16T17:46:56.413 に答える
2

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

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

{
    "request": [
        {
            "Id": "...",
            "System": 1,
            ...
        },
        { ... }
    ]
}
于 2013-04-16T17:02:48.193 に答える