web-dev-qa-db-fra.com

Comment développer une API Web ASP.NET pour accepter un objet complexe comme paramètre?

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.

41
Tohid

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

71
Filip W