FluentValidation 验证框架笔记1

FluentValidation第三方验证框架

引用包

FluentValidation
FluentValidation.AspNetCore

Core配置:

services.AddMvc()
                .AddFluentValidation(fv =>   //配置第三方输入验证
                    fv.RegisterValidatorsFromAssemblyContaining<Models.IValidator>()//批量注册
                )

 注意:

这里配置为使用FluentValidation验证,Core的自带验证并没有排除,如果输入实体带有注释,则会进行自带的验证

  

这里有二种验证方式

方式一:API输入验证

 实体

    public class User
    {
        public string Name { get; set; }
    }

验证标记,方便注入配置

    public interface IValidator
    {
    }

配置验证内容

    public class UserValidator : AbstractValidator<User>, IValidator
    {
        public UserValidator()
        {
            RuleFor(c => c.Name)
                .NotEmpty().WithMessage("名字不能为空")
                .Length(4, 10).WithMessage("长度必需在4~10字符之间");
        }
    }

使用

        [HttpPost("PostName")]
        public Task<string> PostName(User user)
        {
            return Task.FromResult("OK");
        }

在前端输入的时候进行验证,这个是CORE API自动进行验证的,不需要手动调用验证

方式二:内部传递验证

定义一个泛型验证类

    public class UserValidation<T> : AbstractValidator<T> where T : User
    {
        protected void ValidateName()
        {
            RuleFor(c => c.Name)
                .NotEmpty().WithMessage("名字不能为空")
                .Length(4, 10).WithMessage("长度必需在4~10字符之间");
        }

        //其它验证条件
        //protected void ValidateOther()
        //{
        //}
    }

定义一个验证模型

    public class UserCommandValidation : UserValidation<User>
    {
        public UserCommandValidation()
        {
            //需要验证哪些
            ValidateName();

            //其它验证
            //ValidateOther();
        }
    }

定义一个类,在类中使用验证模型

    public class UserCommand
    {
        //定义验证结果
        public ValidationResult validationResult;

        public bool IsValid(User user)
        {
            //验证结果,初始化并进行验证
            validationResult = new UserCommandValidation().Validate(user);
            //返回验证结果
            return validationResult.IsValid;
        }
    }

在实际使用的类中,手动调用验证

        public List<string> GetName()
        {
            User user = new User() { Name = "1" };
            UserCommand userCommand = new UserCommand();
            List<string> errorInfo = new List<string>();

            //手动调用验证
            if (!userCommand.IsValid(user))
            {
                foreach (var error in userCommand.validationResult.Errors)
                {
                    errorInfo.Add(error.ErrorMessage);
                }
            }


            return errorInfo;
        }

到此,基础验证完成,FluentValidation是一款很强大的验证框架,有多种验证方式,可以在网上查询

原文地址:https://www.cnblogs.com/myfqm/p/12987626.html