我有以下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获得结果,参数为null。
解决方法
默认情况下,复杂类型是从body读取的,这就是为什么你得到null。
将您的操作签名更改为
public IEnumerable<Users> Get([FromUri]MyApiParameters parameters)
如果你想要模型绑定器从querystring拉模型。
您可以阅读更多关于Web API如何参数绑定在Mike Stall从MSFT – http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx的优秀文章