web-dev-qa-db-fra.com

Publication d'un tableau d'objets avec MVC Web API

J'ai une opération de publication de base qui fonctionne sur un seul objet de RecordIem. Ce que je voudrais faire, c'est faire la même action mais en masse en publiant un tableau de demandes en utilisant le même format.

Par exemple:

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

Et quand je poste le Json:

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

tout fonctionne bien. Je voudrais publier Json similaire à:

{
    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"
}

Et ayez une méthode similaire à celle ci-dessous:

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

J'ai essayé d'utiliser à la fois le [FromBody] et [ModelBinding] attributs sur le tableau et essayé d'utiliser différents types (List, IList, IEnumerable) mais en vain. Lors de l'utilisation de [FromBody] le paramètre de demande est null et lorsque vous utilisez [ModelBinding] la liste est vide. J'ai essayé d'utiliser les deux et cela ne fonctionne pas non plus.

Je préfère ne pas avoir à recourir à des messages uniques en boucle dans mon client.

Merci

26
brimble2010

Puisque votre Post attend un RecordItem[], votre contenu JSON dans votre corps de demande doit également être dans un tableau.

Ce que vous avez est assez proche - essayez d'ajouter une paire de crochets [] autour de vos données:

[{
    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

Pour tous ceux qui obtiennent juste un tableau vide quoi qu'ils essaient, essayez ceci:

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

Les données doivent être un seul objet anonyme au lieu d'un tableau brut.

Des informations ont été trouvées ici .

22
Oliver Kötter

Il est important que votre json contienne le nom du paramètre request. Une autre remarque: vous devez le poster sous forme de tableau.

Votre json ressemblerait à ceci:

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