Подтвердить что ты не робот

Как разработать 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.

4b9b3361

Ответ 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