Проверка модели API C # .NET Core 3 игнорирует свойство

#c# #.net-core #api-design #model-validation

#c# #.net-core #api-дизайн #проверка модели

Вопрос:

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

Как возможно, что первый запрос не возвращает ошибку об отсутствующем параметре ParticipantUserId, а второй запрос возвращает? Это предполагаемое поведение?

Во время отладки я заметил, что отсутствующий параметр не отображается в массиве ошибок, хотя логически это должно быть?

Примеры:

Учитывая следующую модель:

         [Required]
        [Range(1, int.MaxValue, ErrorMessage = "ParticipantUserId cannot be a negative number.")]
        public int? ParticipantUserId { get; set; }

        public DateTime? DateEnd { get; set; }

        public DateTime? DateStart { get; set; }

        [MaxLength(50)]
        public string ExternalReferenceKey { get; set; }

        [Required]
        public int? ScheduleId{get;set;}
  

Запрос # 1 (отсутствует требуемый идентификатор участника и указана неверная дата):

 {
    "scheduleId": 1,
    "correspondenceNote": "DND",
    "dateStart": "2020-016T00:00:00",
    "dateEnd": "2020-07-16T00:00:00",
    "ExternalReferenceKey": null,
    "internalNoTe": "Note",
    "transferEnrollmentId": null
}
  

ВОЗВРАТ:

 {
    "fields": [
        {
            "propertyName": "dateStart",
            "errorMessage": "Could not convert string to DateTime: 2020-016T00:00:00"
        }
    ],
    "errorMessage": "One or more validation errors occurred.",
    "statusCode": 400
}
  

В то время как

Запрос # 2 (отсутствует требуемый идентификатор участника, но с действительными датами):

 {
    "scheduleId": 1,
    "correspondenceNote": "DND",
    "dateStart": "2020-07-16T00:00:00",
    "dateEnd": "2020-07-16T00:00:00",
    "ExternalReferenceKey": null,
    "internalNoTe": "Note",
    "transferEnrollmentId": null
}
  

ВОЗВРАТ:

 {
    "fields": [
        {
            "propertyName": "ParticipantUserId",
            "errorMessage": "The field ParticipantUserId must be between 1 and 2147483647"
        }
    ],
    "errorMessage": "One or more validation errors occurred.",
    "statusCode": 400
}
  

Комментарии:

1. Ваш объект ответа не похож на типичный встроенный ответ badrequest. Эта проверка переопределена где-то в вашем приложении? Может быть, пользовательское промежуточное программное обеспечение? Если где-то Validator вызывается вручную, убедитесь, что вы предоставили перегрузку для validateAllProperties as true .

2. я предполагаю, что при привязке json к вашей модели происходит сбой привязки модели (недопустимая дата-время), и модель не построена, следовательно, проверка не будет выполнена. Попробуйте принять строку вместо DateTime и используйте IValidatableObject для добавления пользовательских проверок синтаксического анализа datetime

3. ммм, «Идентификатор участника пользователя не может быть отрицательным числом».!= «Поле ParticipantUserId должно быть от 1 до 2147483647»