2013-04-16 6 views
25

Ich habe eine grundlegende Post-Operation, die auf ein einzelnes Objekt von RecordIem funktioniert. Was ich tun möchte, ist die gleiche Aktion, aber in großen Mengen, indem Sie ein Array von Anfragen im selben Format veröffentlichen.Veröffentlichen Array von Objekten mit MVC Web API

Zum Beispiel:

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

Und wenn ich die Json schreiben:

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

alles funktioniert. Ich möchte Json schreiben ähnelt:

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

und ein Verfahren ähnlich müssen darunter abholen:

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

Ich habe versucht, sowohl mit den [FromBody] und [ModelBinding] Attribute auf dem Array und versuchte, verschiedene Typen verwenden (List, IList, IEnumerable), aber ohne Erfolg. Bei Verwendung von [FromBody] ist der Anforderungsparameter null und bei Verwendung von [ModelBinding] ist die Liste leer. Ich habe versucht, beide zu verwenden, und das funktioniert auch nicht.

Ich würde nicht lieber auf einzelne Posts in meinem Client loopen müssen.

Dank

Antwort

19

Da Ihr Post erwartet ein RecordItem[], Ihre JSON Inhalt in Ihrer Anfrage Körper sollte auch in einem Array sein.

Was haben Sie ziemlich nah dran ist - versuchen, ein Paar eckige Klammer [] um Ihre Daten hinzufügen:

[{ 
    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" 
}] 
+0

Das hat funktioniert. Danke :) – brimble2010

+1

Dies kommt immer noch mit einer Zählung von 0, nicht sicher, wie/warum es für ihn arbeitete, aber sieht aus wie das war vor über 2 Jahren ... –

1

Es ist wichtig, dass Ihr json den Namen request Parameter enthält. Eine andere Anmerkung: Sie müssen es als ein Array veröffentlichen.

Ihre json würde wie folgt aussehen:

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

Für alle, die nur ein leeres Array bekommen, was sie versuchen, versuchen Sie dies:

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

Die Daten müssen ein einzelnes anonymes Objekt anstelle eines RAW-Arrays sein.

Info wurde gefunden here.

+0

Wow und das ist immer noch nicht behoben, verrückt! GETs funktionieren auch nicht ... –

+0

Immer noch ein Problem von heute für mich. Tolle Lösung! – cscott530

+0

funktioniert auch für eckigen $ http Service – dier