Я использую Fluent Validation для своих моделей, и я стараюсь отображать поля и проверять с помощью Swagger.Swagger не распознает Fluent Проверка вложенных объектов
У меня есть следующие модели:
public abstract class PersonModel
{
protected PersonModel()
{
DetailModel = new DetailModel();
}
public DetailModel Details { get; set; }
}
public class CustomerModel : PersonModel
{
public DateTime DateJoined { get; set; }
}
public class DetailModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
У меня есть следующие проверки набор с Fluent Validation:
public class CustomerModelValidator : AbstractValidator<CustomerModel>
{
public CustomerModelValidator()
{
RuleFor(x => x.DetailModel.FirstName)
.NotEmpty().WithMessage("FirstName is required");
RuleFor(x => x.DateJoined)
.NotEmpty().WithMessage("DateJoined is required");
}
}
Чтобы сделать Кураж понять Fluent Validation, я использовал этот сайт в качестве ссылки: http://blog.yeticode.co.uk/2015/10/add-fluentvalidation-rules-to-swagger.html
Чтобы Swagger понимал новые валидации, линия ниже делает магию:
schema.required.Add("DateJoined");
Однако, Swagger не понимает проверку ребенка, такую как FirstName
. Если в этом случае я использую аннотацию данных в верхней части поля [Required]
, Swagger правильно ее идентифицирует.
Проблема с решением, представленным в этом блоге, является переменной Schema, которая не содержит навигации к полям DetailModel
. Он содержит только определение для DetailModel
.
Но так как FirstName
не указан в схеме, я не могу добавить его в обязательные поля.
Неужели это кому-то удалось?
Я упомянул только строку 'schema.required.Add (« DateJoined »);' как способ облегчить чтение из сообщения в блоге. Валидация уже установлена, и эта строка только заставляет Swagger признать, что DateJoined требуется. Проблема, с которой я сталкиваюсь, связана с вложенными объектами. –
@GustavoMichel Я вас неправильно понял. Вы пытались добавить ключи «Details.FirstName», «Details.LastName» вручную в код? После этого работает валидация? –
Да, я пробовал это, но это не сработало, потому что 'Details.FirstName' и' Details.LastName' не входят в список полей 'schema.properties'. В этом списке находится только 'Details'. Валидация отлично работает с FluentValidation. Моя единственная проблема заключается в том, что Swagger признает это как обязательное поле. –