2012-12-05 66 views
2

是否可以将ViewModel对象传递给WebApi控制器操作而不是单独的参数?将ViewModel传递给Web-Api操作

而不是使用:

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

我想用:

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; } 
} 

这似乎并不为我工作。当我打电话给/ api/contacts /?P1 = aaa & P2 = bbb testVM对象没有被填充(null)。

而且,我想TestVM有定义valdiation attribtues和我的API控制器使用ModelState.IsValid。

回答

6

除非另有声明否则WebApi将使用请求的内容/主体对复杂模型进行反序列化。要告诉的WebAPI使用的URL来构造模型,你需要指定[FromUri]属性:

public IEnumerable<Contact> GetContacts([FromUri]TestVM testVM) 
{ 
    // some logic 
} 
相关问题