2012-12-05 2 views
2

Est-il possible de passer un objet ViewModel à l'action du contrôleur WebApi au lieu de params séparés?Passage de ViewModel à l'action Web-Api

Au lieu d'utiliser:

public class ContactsController : ApiController 
{ 
    public IEnumerable<Contact> GetContacts(string p1, string p2) 
    { 
     // some logic 
    } 
} 

Je voudrais utiliser:

public class ContactsController : ApiController 
{ 
    public IEnumerable<Contact> GetContacts(TestVM testVM) 
    { 
     // some logic 
    } 
} 

public class TestVM 
{ 
    public string P1 { get; set; } 
    public string P2 { get; set; } 
} 

Cela ne semble pas fonctionner pour moi. Quand j'appelle/api/contacts /? P1 = aaa & P2 = bbb l'objet testVM n'est pas rempli (null).

En outre, je voudrais que le TestVM ait des attributions de valdiation définies et utilise ModelState.IsValid dans mon contrôleur d'API.

Répondre

6

Sauf indication contraire, WebApi va désérialiser les modèles complexes en utilisant le contenu/corps de la requête. Pour indiquer à WebApi d'utiliser l'URL pour construire le modèle, vous devez spécifier l'attribut [FromUri]:

public IEnumerable<Contact> GetContacts([FromUri]TestVM testVM) 
{ 
    // some logic 
} 
Questions connexes