#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
astrue
.2. я предполагаю, что при привязке json к вашей модели происходит сбой привязки модели (недопустимая дата-время), и модель не построена, следовательно, проверка не будет выполнена. Попробуйте принять строку вместо DateTime и используйте IValidatableObject для добавления пользовательских проверок синтаксического анализа datetime
3. ммм, «Идентификатор участника пользователя не может быть отрицательным числом».!= «Поле ParticipantUserId должно быть от 1 до 2147483647»