Post an array of objects to WebAPI using jQuery
This is quite niche but caught me out the other day.
Let’s say you have a person entity:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
and you have a WebAPI method that takes in a group:
public class UsersController : ApiController
{
public IEnumerable<Person>Post(IEnumerable<Person> persons)
{
// do some registration work
}
}
You create your call in JavaScript something like this:
var people = [];
people.push({ name: 'Kev', age: 32 });
people.push({ name: 'Ian', age: 31 });
people.push({ name: 'Garry', age: 32 });
var request = $.ajax({
dataType: 'json',
url: '/api/users',
method: 'POST',
data: people,
});
You POST that to the API and you get… an empty array. Not great.
jQuery quirk
Turns out this is a known issue and the fix is pretty simple.
Change your data to be a single anonymous object instead of a raw array and it’ll work. So this:
var request = $.ajax({
dataType: 'json',
url: '/api/users',
method: 'POST',
data: { '': people },
});
Easy.