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

ASP.NET MVC Web Api Get Not Mapping QueryString для строго типизированного параметра

Запрос параметра всегда имеет значение null, используя веб-API. Я что-то пропускаю с использованием строго типизированного объекта в качестве параметра вместо простых типов в качестве параметров.

Url

http://localhost:2222/api/v1/divisions?EventId=30

Действие контроллера

public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request)
        {
            return _apiDivisionsService.GetDivisions(request);
        }

Объект

public class ApiDivisionsRequest : ApiAuthorizedRequest
    {
        public ApiDivisionsRequest()
        {
            Page = 1;
            PageSize = 10;
        }

        public int EventId { get; set; }
        public int PageSize { get; set; }
        public int Page { get; set; }
        public string[] Includes { get; set; }
    }  
4b9b3361

Ответ 1

Я очень сильно приглашаю вас прочитать следующую статью, чтобы лучше понять, как привязка параметров работает в веб-API. После прочтения вы поймете, что по умолчанию веб-API связывает параметры строки запроса с примитивными типами и запрашивает содержимое тела для сложных типов.

Поэтому, если вам нужно привязать параметры строки запроса к сложным типам, вам необходимо переопределить это поведение по умолчанию, украсив ваш параметр параметром [FromUri]:

public virtual ApiDivisionsResponse  Get([FromUri] ApiDivisionsRequest request)
{
    ...
}

И да, я согласен с тобой - что адская привязка модели была настолько простой в простом ASP.NET MVC, и они создали кошмар в веб-API. Но как только вы знаете, как это работает, вы избегаете ошибок.