如何开发一个ASP.NET Web API接受一个复杂的对象作为参数?

我有以下Web API(GET):

public class UsersController : ApiController { public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate) { // Code } } 

这是一个GET,所以我可以这样调用它:

 http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01 

并接收用户的XML结果。

是否有可能像这样封装参数到一个类:

 public class MyApiParameters { public string FirstName {get; set;} public string LastName {get; set;} public DateTime BirthDate {get; set;} } 

然后有:

  public IEnumerable<Users> Get(MyApiParameters parameters) 

我已经尝试过,并且随时尝试从http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01获取结果, parameter为null。

默认情况下,复杂types是从正文读取,这就是为什么你得到空。

改变你的行动签名

  public IEnumerable<Users> Get([FromUri]MyApiParameters parameters) 

如果您希望模型联编程序从查询string中提取模型。

您可以在MSFT的Mike Stall的优秀文章中详细了解Web API如何进行参数绑定 – http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter -binding.aspx