8.5请求数据校验

简介: 为了提高响应速度,一般在前端界面需要进行数据校验,但是在后端也需要对数据进行校验,以防止不正常的数据传入后台。.net内置在`System.ComponentModel.DataAnnotations`命名空间下定义了很对检验规则`Attribute`,如[Required]表示必须为非空,[EmailAddress]表示必须为邮箱格式,[RegularExpression]可以用正则对数据进行限制,但是这样模型类和检验规则耦合性很强,不推荐使用。

8.5请求数据校验

为了提高响应速度,一般在前端界面需要进行数据校验,但是在后端也需要对数据进行校验,以防止不正常的数据传入后台。

.net内置在System.ComponentModel.DataAnnotations命名空间下定义了很对检验规则Attribute,如[Required]表示必须为非空,[EmailAddress]表示必须为邮箱格式,[RegularExpression]可以用正则对数据进行限制,但是这样模型类和检验规则耦合性很强,不推荐使用。

FluentValidation

FluentValidation可以将规则单独定义在一个类中,所以推荐使用这种方式

FluentValidation的用法:

  1. NuGet安装FluentValidation.AspNetCore
  2. Program.cs注册服务

builder.Services.AddFluentValidation(fv=> {

   Assemblyassembly=Assembly.GetExecutingAssembly();

   //将指定程序集中所有实现了IValidator接口的数据验证类注册到容器中

   fv.RegisterValidatorsFromAssembly(assembly);

})

  1. 编写模型类

public record Login2Request(string Email,string Password,string Password2)

  1. 编写一个继承自AbstractValidator的数据校验类

publicclassLogin2RequestValidator : AbstractValidator<Login2Request>

{

    publicLogin2RequestValidator()

    {

       //通过RuleFor指定对哪个属性进行校验

        RuleFor(x=>x.Email).NotNull().EmailAddress()

            .Must(v=>v.EndsWith("@qq.com") ||v.EndsWith("@163.com"))//Must可以自定义

            .WithMessage("只支持QQ和163邮箱");

        RuleFor(x=>x.Password).NotNull().Length(3, 10)

            .WithMessage("只支持QQ和163邮箱")

            .Equal(x=>x.Password2).WithMessage("两次密码不一致");//Message只作用于之前的规则

    }

}

FluentValidation注入服务

publicclassLogin2RequestValidator : AbstractValidator<Login2Request>

{

    publicLogin2RequestValidator(TestDbContextdbtext)//构造函数注册

    {

        RuleFor(x=>x.Email).NotNull().EmailAddress()

            .Must(name=>dbtext.Users.Any(u=>u.UserName==name))

            .WithMessage("只支持QQ和163邮箱");

    }

}

//建议使用MustAsync等异步方法


相关文章
|
7月前
|
Cloud Native NoSQL 关系型数据库
数据传输DTS校验问题之校验报错如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
3月前
|
小程序
不要手动做数据校验
不要手动做数据校验
36 0
|
7月前
|
SQL API 数据库
优雅地进行入参数据校验:场景和处理方式
在日常的开发工作中,入参数据校验是确保程序健壮性的关键步骤之一,我们需要确保请求中的数据类型、格式和取值范围符合要求,以保证接口的安全性和稳定性,还有就是传递给方法或函数的数据需要满足一定的规则和要求,以保证程序的正常运行和数据的有效处理。那么本文就来分享一下在哪些场景下进行入参数据校验,并分享一些优雅的处理方式,以提高代码的可读性、扩展性和复用性。
116 3
优雅地进行入参数据校验:场景和处理方式
|
前端开发 Java 数据库
Spring Entity数据校验,分组校验,返回校验结果给前端
Spring Entity数据校验,分组校验,返回校验结果给前端
104 0
|
7月前
|
存储 Java 物联网
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
|
7月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
73 0
|
前端开发
IE校验问题
IE校验问题
53 0
|
存储 SQL 容灾
推荐一款好用的数据一致性校验工具
NineData 是玖章算术旗下的多云数据管理平台,它是一款即开即用的数据管理 SAAS 服务。当前 NineData 已经支持数十种常见同异构数据源(MySQL、SQLServer、CK 等)之间的结构对比、数据对比及数据订正能力。NineData 结构及数据对比作为独立服务,可以灵活支持 IDC、云主机自建及云托管数据源的数据一致性校验及快速修复。从使用体验、产品能力、稳定性及性能等维度综合来看,NineData 是一款综合实例比较强、比较难得的校验工具。
2954 1
推荐一款好用的数据一致性校验工具
|
前端开发 Java API
数据校验(前端数据校验、JSR303校验)
数据校验(前端数据校验、JSR303校验)
269 0