Reputation: 6679
I have the following Web API (GET):
public class UsersController : ApiController
{
public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate)
{
// Code
}
}
It's a GET, so I can call it like this:
http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01
and receive an xml result of user(s).
Is it possible to encapsulate parameters to one class like this:
public class MyApiParameters
{
public string FirstName {get; set;}
public string LastName {get; set;}
public DateTime BirthDate {get; set;}
}
And then have:
public IEnumerable<Users> Get(MyApiParameters parameters)
I've tried it and anytime I try to get result from http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01
, the parameter
is null.
Upvotes: 42
Views: 33366
Reputation: 27187
By default complex types are read from body, that's why you are getting null.
Change your action signature to
public IEnumerable<Users> Get([FromUri]MyApiParameters parameters)
if you want the model binder to pull the model from the querystring.
You can read more about how Web API does parameter binding in the excellent article by Mike Stall from MSFT - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
Upvotes: 73