42

我有以下 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都是空的。

4

1 回答 1

74

默认情况下,复杂类型是从正文中读取的,这就是您得到 null 的原因。

将您的操作签名更改为

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

如果您希望模型绑定器从查询字符串中提取模型。

您可以在 MSFT 的 Mike Stall 的优秀文章中阅读更多关于 Web API 如何进行参数绑定的信息 - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter -binding.aspx

于 2012-09-11T20:35:22.887 回答