J'ai l'API Web (GET) suivante:
public class UsersController : ApiController
{
public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate)
{
// Code
}
}
C'est un GET, donc je peux l'appeler comme ceci:
http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01
et recevez un résultat xml des utilisateurs.
Est-il possible d'encapsuler des paramètres dans une classe comme ceci:
public class MyApiParameters
{
public string FirstName {get; set;}
public string LastName {get; set;}
public DateTime BirthDate {get; set;}
}
Et puis avoir:
public IEnumerable<Users> Get(MyApiParameters parameters)
Je l'ai essayé et chaque fois que j'essaie d'obtenir le résultat de http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01
, le parameter
est nul.
Par défaut, les types complexes sont lus à partir du corps, c'est pourquoi vous obtenez null.
Changez votre signature d'action en
public IEnumerable<Users> Get([FromUri]MyApiParameters parameters)
si vous souhaitez que le classeur de modèle tire le modèle de la chaîne de requête.
Vous pouvez en savoir plus sur la façon dont l'API Web effectue la liaison de paramètres dans l'excellent article de Mike Stall de MSFT - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi -does-parameter-binding.aspx