1

Как мы можем проверить модели, переданные из представлений, в наши API-контроллеры в ASP.NET Core. Есть ли такой инструмент, как FluentValidation или любой подобный подход, который можно настроить для возврата наших ошибок и сообщений обратно в клиентские приложения?Просмотр моделей и проверка правильности в ASP.NET Core

+2

Похоже, что FluentValidation доступен для .NET Core? Вот пример [здесь] (https://github.com/JeremySkinner/FluentValidation/issues/98#issuecomment-249701088). –

ответ

2

Вы используете интерфейс IValidatableObject. Затем создайте абстрактный базовый класс и пусть ваши классы наследуют его. Вам нужно будет добавить ссылку на System.ComponentModel.DataAnnotations. Вы также можете добавить вспомогательные методы в базовый класс.

public abstract class ValidatingBase : IValidatableObject 
{ 
     public bool IsNullOrEmpty(string property) 
     { 
      return string.IsNullOrEmpty(property); 
     } 

      #region IValidatableObject 

     public abstract IEnumerable<ValidationResult> Validate(ValidationContext validationContext); 

     public IEnumerable<ValidationResult> Validate() 
     { 
      var validationErrors = new List<ValidationResult>(); 
      var ctx = new ValidationContext(this, null, null); 
      Validator.TryValidateObject(this, ctx, validationErrors, true); 
      return validationErrors; 
     } 

     #endregion IValidatableObject 
} 

Тогда ваш класс, который наследует от выше

public class InsertCompanies : ValidatingBase 
{ 
    public string CompanyName { get; set; } 

    #region ValidatingCommandBase 

     public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (this.IsNullOrEmpty(this.Name)) 
      { 
       yield return new ValidationResult($"{nameof(this.Name)} field can't be null or empty.", new[] { nameof(this.Name) }); 
      } 

      if (this.Name?.Length > 100) 
      { 
       yield return new ValidationResult($"{nameof(this.Name)} field can't be greater than 100 characters.", new[] { nameof(this.Name) }); 
      } 
     } 

     #endregion ValidatingCommandBase 
} 

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

Asp.Net Core с радостью назовет метод для вас, дополнительную информацию можно найти по ссылке ниже. https://docs.asp.net/en/latest/mvc/models/validation.html

1
[HttpPost] 

    public ActionResult Register(RegisterViewModel model) 
    { 
    // if the validation doesn't match then load same view again with errors 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 



    } 
+0

спасибо Насим, я уже знаю об этом. Я ищу более динамичный и индивидуальный подход, используя библиотеку самородков или лучший способ сделать это. – Coding

Смежные вопросы