Passing a list of int to a HttpGet request

StormFoo picture StormFoo · Jun 10, 2013 · Viewed 48.1k times · Source

I have a function similar in structure to this:

[HttpGet]
public HttpResponseMessage GetValuesForList(List<int> listOfIds)
{
    /* create model */        

    foreach(var id in listOfIds)
        model.Add(GetValueForId(id)

    /* create response for model */
    return response;
}

However, when I do a Get request for the method:

{{domain}}/Controller/GetValuesForList?listOfIds=1&listOfIds=2

I get an error when debugging stating that listOfIds is null. In our controller we have a number of public HttpGet methods that work fine, and when changing the parameter to a single int it works. I've tried changing the parameter type to int[] and IEnumerable<int> too, but no change.

However, when changing the call to a HttpPost and passing the list as an x-www-form-urlencoded value, the method works.

Is it possible to pass a list to a Get method, or will I have to use Post? Since it's not actually a post method (as it returns a JSON model of values and nothing is saved to the server).

Answer

Liran Brimer picture Liran Brimer · May 11, 2014

If you are using MVC WebAPI, then you can declare your method like this:

[HttpGet]
public int GetTotalItemsInArray([FromUri]int[] listOfIds)
{
       return listOfIds.Length;
}

and then you query like this: blabla.com/GetTotalItemsInArray?listOfIds=1&listOfIds=2&listOfIds=3

this will match array [1, 2, 3] into listOfIds param (and return 3 as expected)