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月前
|
前端开发
CROS跨域配置异常
这是一个CORS跨域问题案例,前端(localhost:8080)尝试访问后端(localhost:9999)被阻止。后端已配置CORS过滤器,但`addAllowedOrigin`错误地设为`http://localhost:9999`。正确配置应为`http://localhost:8080`以允许前端请求。
95 1
|
5月前
|
小程序
不要手动做数据校验
不要手动做数据校验
40 0
|
7月前
|
负载均衡 Java API
通用快照方案问题之Feign添加请求拦截器如何解决
通用快照方案问题之Feign添加请求拦截器如何解决
52 1
|
9月前
|
SQL API 数据库
优雅地进行入参数据校验:场景和处理方式
在日常的开发工作中,入参数据校验是确保程序健壮性的关键步骤之一,我们需要确保请求中的数据类型、格式和取值范围符合要求,以保证接口的安全性和稳定性,还有就是传递给方法或函数的数据需要满足一定的规则和要求,以保证程序的正常运行和数据的有效处理。那么本文就来分享一下在哪些场景下进行入参数据校验,并分享一些优雅的处理方式,以提高代码的可读性、扩展性和复用性。
138 3
优雅地进行入参数据校验:场景和处理方式
|
前端开发 Java 数据库
Spring Entity数据校验,分组校验,返回校验结果给前端
Spring Entity数据校验,分组校验,返回校验结果给前端
120 0
|
小程序
小程序接口请求配置
小程序接口请求配置
188 0
|
9月前
|
存储 Java 物联网
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
|
9月前
|
数据库 索引
常见保持请求幂等的方式
常见保持请求幂等的方式
65 0
|
前端开发 Java API
数据校验(前端数据校验、JSR303校验)
数据校验(前端数据校验、JSR303校验)
277 0
GoFrame数据校验之校验对象 | 校验结构体
这篇文章将会为大家介绍GoFrame数据校验中校验对象的知识点,包括:Validator对象常用方法的介绍、单数据校验、校验Map、校验结构体的示例
193 0
GoFrame数据校验之校验对象 | 校验结构体