Метод Web Api Post не конвертирует объект, если я отправляю необязательное свойство массива - PullRequest
0 голосов
/ 13 апреля 2020

Я создал метод HTTP post, который работает с объектом со свойствами с обычным типом данных. Как только я отправляю необязательный массив с объектом post, он не десериализуется в API, и я получаю сообщение об ошибке Value cannot be null.\r\nParameter name: instance

[HttpPost]
public async Task<Response<AvailabilitySlotResponse[]>> SearchAvailableSlot([FromBody]SlotSearchRequest slotSearchRequest)
{
    this.ValidateRequest(slotSearchRequest);

    if (!ModelState.IsValid)
    {
return new Response<AvailabilitySlotResponse[]>
{
    StatusCode = (int) HttpStatusCode.BadRequest,
    ErrorText = $"Validation Failed",
    Payload = Array.Empty<AvailabilitySlotResponse>()
};
    }

    var slotsModels = await _slotService.SearchForAvailableSlots(slotSearchRequest.StartTime.Value, slotSearchRequest.EndTime.Value,
slotSearchRequest.TimeGroupId.Value, slotSearchRequest.PreferredResources, slotSearchRequest.Gender, slotSearchRequest.Roles);

    return new Response<AvailabilitySlotResponse[]>
    {
StatusCode = (int) HttpStatusCode.OK,
Payload = slotsModels.Select(t => _timeSlotResponseMapper.ConvertServiceModelToView(t)).ToArray()
    };
}

Мой класс модели,

[DataContract]
public class SlotSearchRequest : IRequest
{
[DataMember] [Required(ErrorMessage ="Start time window need to be passed in")] public DateTime? StartTime { get; set; }
[DataMember] [Required(ErrorMessage = "End time window need to be passed in")] public DateTime? EndTime { get; set; }
[DataMember] [Required(ErrorMessage = "Please provide a timegroup")] public Guid? TimeGroupId { get; set; }
[DataMember] public Guid[] Gender { get; set; }
[DataMember] public Guid[] Roles { get; set; }
[DataMember] public Guid[] PreferredResources { get; set; }
}

Я использую post man, и это работает,

{
    "startTime" : "2020-04-15T19:00:00.000",
    "endTime" : "2020-04-15T22:00:00.000",
    "timeGroupId" : "684c69af-fa7b-ea11-a811-000d3a86bd1a" 
}

, но это не так,

{
    "startTime" : "2020-04-15T19:00:00.000",
    "endTime" : "2020-04-15T22:00:00.000",
    "timeGroupId" : "684c69af-fa7b-ea11-a811-000d3a86bd1a"
    "gender" : ["d0c12cab-1be7-e611-8102-e0071b69ffe1"]
}

всякий раз, когда я добавляю массив пола в свой код, я вижу, что slotSearchRequest объект не десериализовать и выдавать как null.

Я не использую какой-либо форматер и не уверен, нужен ли он здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...