2013-04-16 17 views
25

Mam podstawową operację pocztową, która działa na pojedynczym obiekcie RecordIem. Chciałbym zrobić to samo, ale zbiorczo, publikując tablicę żądań w tym samym formacie.Umieszczanie tablicy obiektów za pomocą interfejsu API MVC Web API

Na przykład:

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

I kiedy zaksięgować JSON:

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

wszystko działa poprawnie. Chciałbym odpowiedzieć JSON podobny do:

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

I mają sposób podobny do tego poniżej pick up:

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

Próbowałem przy użyciu zarówno [FromBody] i [ModelBinding] atrybuty na tablicy i próbował używając różnych typów (Lista, IList, IEnumerable), ale bez skutku. Podczas korzystania z [FromBody] parametr żądania to null, a podczas korzystania z [ModelBinding] lista jest pusta. Próbowałem używać obu i to też nie działa.

Wolałbym nie musieć uciekać się do zapętlania pojedynczych wiadomości w moim kliencie.

Dzięki

Odpowiedz

19

Od swojej Post oczekuje RecordItem[], zawartość JSON w organizmie żądanie powinno być w szyku, jak dobrze.

Co masz jest dość blisko - warto dodać parę nawiasach kwadratowych [] wokół danych:

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

To działało. Dzięki :) – brimble2010

+1

To wciąż przychodzi z liczbą 0, nie wiem jak/dlaczego to dla niego działało, ale wygląda na to, że było ponad 2 lata temu ... –

1

To ważne, że json zawiera nazwę request parametru. Inna uwaga: musisz opublikować ją jako tablicę.

Twój json będzie wyglądać następująco:

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

za wszystko, po prostu pustą tablicę cokolwiek próbować, próbować to:

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

Dane muszą być pojedynczym anonimowym obiektem zamiast surowej tablicy.

Informacja została znaleziona here.

+0

Wow i to wciąż nie zostało naprawione, szalone! GET też nie działają ... –

+0

Wciąż kwestia jak na dziś dla mnie. Świetna poprawka! – cscott530

+0

to samo działa dla usługi kątowej $ http – dier

Powiązane problemy