Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Posting array of objects with MVC Web API

I have a basic post operation that works on a single object of RecordIem. What I would like to do is do the same action but in bulk by posting an array of requests using the same format.

For instance:

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

And when I post the Json:

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

everything works fine. I would like to post Json similar to:

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

And have a method similar to below pick this up:

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

I've tried using both the [FromBody] and [ModelBinding] attributes on the array and tried using different types (List, IList, IEnumerable) but to no avail. When using [FromBody] the request parameter is null and when using [ModelBinding] the list is empty. I've tried using both and that doesn't work either.

I'd rather not have to having to resort to looping single posts in my client.

Thanks

like image 660
brimble2010 Avatar asked Apr 16 '13 16:04

brimble2010


1 Answers

For all that just get an empty array whatever they try, try this:

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

The data must be a single anonymous object instead of a raw array.

Info was found here.

like image 152
Oliver Kötter Avatar answered Sep 19 '22 13:09

Oliver Kötter