Как разработать ASP.NET Web API для принятия сложного объекта в качестве параметра?
У меня есть следующий веб-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.
Ответы
Ответ 1
По умолчанию сложные типы считываются из тела, поэтому вы получаете нуль.
Измените свою сигнатуру действия на
public IEnumerable<Users> Get([FromUri]MyApiParameters parameters)
если вы хотите, чтобы модельное связующее устройство вытащило модель из строки запроса.
Вы можете узнать больше о том, как веб-API выполняет привязку параметров в превосходной статье Майка Стойла от MSFT - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx