• .netcore3.1——应用验证组件FluentValidation


    POST或者GET到服务端的数据是必须进行有效性校验的!数据校验也是重要的业务逻辑,让数据可信!

    .NET中内置了验证组件(System.ComponentModel.DataAnnotations),可以简单的以特性方式实现,也是最常用的。

    FluentValidation是个开源项目,Github(https://github.com/FluentValidation/FluentValidation),它让我们多了一种可选性,至于用哪种方式就看个人或团队习惯。

    .netcore3.1中使用FluentValidation可以简单按以下步骤实现:

    1、Nuget引用程序包:

     2、Startup文件ConfigureServices方法的设置:

    1             services.AddControllersWithViews()
    2             .AddFluentValidation(config =>//添加FluentValidation验证
    3             {
    4                 //程序集方式添加验证
    5                 config.RegisterValidatorsFromAssemblyContaining(typeof(Validation.LoginModelValidation));
    6                 //是否与MvcValidation共存,设置为false后将不再执行特性方式的验证
    7                 config.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
    8             });

    3、创建验证规则(格式比较固定其中LoginModel为被校验模型):

     1     public class LoginModelValidation : AbstractValidator<LoginModel>
     2     {
     3         public LoginModelValidation()
     4         {
     5             this.CascadeMode = CascadeMode.StopOnFirstFailure;
     6             this.RuleFor(o => o.UserName)
     7                 .NotEmpty().WithMessage("用户名不能为空")
     8                 .Length(4, 32).WithMessage("用户名长度校验失败");
     9 
    10             this.RuleFor(o => o.Password)
    11                 .NotEmpty().WithMessage("用户密码不能为空")
    12                 .Length(4, 8).WithMessage("用户密码长度校验失败");
    13 
    14             //子对象校验
    15             //RuleFor(o => o.Detail)
    16             //    .NotNull().WithMessage("明细对象不能为空")
    17             //    .SetValidator(t => new LoginModelDetailValidation());
    18         }
    19     }

    官方提供了很多验证规则,我们可以直接github下载源码查看,另外还可以自定义规则。

    4、使用方法:

    在mvc中可以直接使用内置模型校验,FluentValidation会处理好ModelState,兼容原有程序写法,如

    1             if (!ModelState.IsValid)
    2             {
    3                 return View("Index", model);
    4             }

    还可以使用FluentValidation提供的校验方式,也是比较通用的方式:

    1             //代码校验方式
    2             Validation.LoginModelValidation validationRules = new Validation.LoginModelValidation();
    3             var validResult = validationRules.Validate(model);
    4             if (!validResult.IsValid)
    5             {
    6                 validResult.AddToModelState(ModelState, string.Empty);
    7                 return View("Index", model);
    8             }

    总结

    FluentValidation以集中管理化方式来处理规则,语法简单易懂,逻辑清晰,可扩展性好,让程序的后期运维也比较方便,而且github一直在维护,是个不错的可选组件。

  • 相关阅读:
    Eletron 打开文件夹,截图
    nodejs 与 json
    drupal sql 源码解析query.inc 文件
    The maximum column size is 767 bytes (Mysql)
    php 过滤emoji
    Mysql delete操作
    Mysql update 一个表中自己的数据
    form 表单排序
    jquery parents用法
    MYSQL数据库重点:流程控制语句
  • 原文地址:https://www.cnblogs.com/quluqi/p/12718981.html
Copyright © 2020-2023  润新知