2013-04-16 16 views
25

Ho un'operazione di post di base che funziona su un singolo oggetto di RecordIem. Quello che mi piacerebbe fare è fare la stessa azione, ma alla rinfusa pubblicando una serie di richieste usando lo stesso formato.Inserimento di array di oggetti con MV Web API

Per esempio:

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

E quando ho posto il JSON:

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

tutto funziona bene. Vorrei inviare JSON simile a:

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

E hanno un metodo simile al di sotto di prendere questo:

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

Ho provato con entrambi gli attributi [FromBody] e [ModelBinding] sulla matrice e ha cercato usando diversi tipi (List, IList, IEnumerable) ma senza successo. Quando si utilizza [FromBody] il parametro di richiesta è null e quando si utilizza [ModelBinding] l'elenco è vuoto. Ho provato ad usare entrambi e anche questo non funziona.

Preferisco non dover dover ricorrere a singoli post in loop nel mio client.

Grazie

risposta

19

Dal momento che il Post si aspetta un RecordItem[], il contenuto JSON nel vostro corpo della richiesta dovrebbe essere in un array come bene.

Quello che hai è abbastanza vicino - provare ad aggiungere un paio di parentesi quadra [] in giro i tuoi dati:

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

Ha funzionato. Grazie :) – brimble2010

+1

Questo arriva ancora con un conteggio di 0, non so come/perché ha funzionato per lui, ma sembra che questo era da oltre 2 anni fa ... –

1

E 'importante che il vostro JSON contiene il nome del parametro request. Un'altra nota: devi postarlo come una matrice.

tuo JSON sarebbe simile a questa:

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

Per tutto ciò che basta avere un array vuoto quello che cercano, provate questo:

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

I dati devono essere un singolo oggetto anonimo anziché un array raw.

Sono state trovate informazioni here.

+0

Wow e questo non è stato ancora risolto, folle! GET non funzionano neanche ... –

+0

Ancora un problema oggi per me. Grande correzione! – cscott530

+0

stesso funziona per il servizio angolare $ http – dier