asp.net core FluentValidation的数据效验 的基本使用

东方镜
2023-12-01

FluentValidation 可以 提供 数据效验的 解耦性,通俗讲 就是 一个类 可以 有多种效验方法,相互都是独立文件,传输和效验 完全分开。并且 自定义 效验 比较 容易。

下面讲解 使用方式

1. 首先 建立 ModifyUser2.cs文件 用于模型类

using System.ComponentModel.DataAnnotations;

namespace aspnetcore014
{
    public class ModifyUser2
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public string Password1 { get; set; }
        public string Password2 { get; set; }
    }
}

2.建立 ModifyUserIntendedEffect.cs文件 用于 效验。 这个自定义的类 必须继承 AbstractValidator<实体类> 并在 在 构造函数中 设置效验方法

using FluentValidation;
using FluentValidation.Validators;

namespace aspnetcore014
{
    public class ModifyUserIntendedEffect:AbstractValidator<ModifyUser2>
    {
        public ModifyUserIntendedEffect()
        {   //Must为自定义 效验
            RuleFor(x=>x.Name).NotNull().Length(3,10)
                .WithMessage("用户名必须3到10位");
            RuleFor(x => x.Email).NotNull().EmailAddress()
                .Must(x => x.EndsWith("@163.com") || x.EndsWith("@qq.com"))
                .WithMessage("必须是163或qq邮箱");
            RuleFor(x => x.Password1).NotNull().Length(5, 10)
                .WithMessage("密码长度为5到10")
                .Equal(x => x.Password2).WithMessage("两次密码必须相等");
        }
    }
}

3.测试程序

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace aspnetcore014.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class Test1Controller : ControllerBase
    {
        [HttpPut]
        public string ModifyUser2(ModifyUser2 modifyUser)
        {
            return "ok";
        }
    }
}

故意写错 返回结果为:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-9276e344142d80a35dcfbed128b34b09-3bd8a3713637dd3f-00",
  "errors": {
    "Name": [
      "用户名必须3到10位"
    ],
    "Email": [
      "'Email' 不是有效的电子邮件地址。",
      "必须是163或qq邮箱"
    ],
    "Password1": [
      "密码长度为5到10",
      "两次密码必须相等"
    ]
  }
}

引用nuget 包为:

FluentValidation.AspNetCore

在Program.cs 文件中配置 如下:

//启动自动验证
builder.Services.AddFluentValidationAutoValidation();
//注入 ModifyUser2 ModifyUserIntendedEffect 对应上面两个cs文件
builder.Services.AddScoped<IValidator<ModifyUser2>, ModifyUserIntendedEffect>();

 类似资料: