Я создал метод 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
.
Я не использую какой-либо форматер и не уверен, нужен ли он здесь.