在 ASP.NET Core 中查看模型和 Fluent Validation

View models and Fluent Validation in ASP.NET Core

我们如何验证从视图传递到 ASP.NET 核心中的 API 控制器的模型。是否有像 FluentValidation 这样的工具或任何类似的方法可以自定义 return 我们的错误和消息返回客户端应用程序?

   [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);
        }



    }

您使用了 IValidatableObject 接口。然后创建一个抽象基础 class 并让你的 class 继承它。您将需要添加对 System.ComponentModel.DataAnnotations 的引用。您也可以将辅助方法添加到基础 class。

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
}

然后你的class继承了上面的

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 很乐意为您调用该方法,更多信息可以在下面的 link 中找到。 https://docs.asp.net/en/latest/mvc/models/validation.html