C#如何使用FluentValidation验证库入门

来源:Java编程网作者:森沢头衔:网络博主
导读:本期聚焦于小伙伴创作的《C#如何使用FluentValidation验证库入门》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用FluentValidation验证库入门》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目开发中,业务数据的合法性校验是必不可少的工作,传统的验证方式往往将数据注解特性直接写在实体类上,耦合性较高且规则扩展不够灵活。FluentValidation作为一款轻量级的验证库,采用分离式的验证器设计,让验证规则的定义更加清晰易维护。

FluentValidation基础概念

FluentValidation的核心思想是创建一个独立的验证器类,专门负责某一类实体的验证规则,每个验证器继承自AbstractValidator<T>,其中T是需要验证的实体类型。这种设计与实体类本身解耦,后续修改验证规则时不需要改动实体类的代码。

环境准备

首先需要在项目中安装FluentValidation的NuGet包,可以通过包管理器控制台执行以下命令:

// 安装FluentValidation包
Install-Package FluentValidation

如果是.NET Core项目,也可以安装对应的依赖注入扩展包,方便后续在项目中注入验证器:

// 安装依赖注入扩展包
Install-Package FluentValidation.DependencyInjectionExtensions

创建验证器

假设我们有一个用户注册的实体类,包含用户名、邮箱、年龄三个属性:

public class UserRegisterDto
{
    public string UserName { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}

接下来为这个实体创建对应的验证器,继承AbstractValidator<UserRegisterDto>,在构造方法中定义验证规则:

using FluentValidation;

public class UserRegisterDtoValidator : AbstractValidator<UserRegisterDto>
{
    public UserRegisterDtoValidator()
    {
        // 用户名验证规则:非空,长度在3到20之间
        RuleFor(x => x.UserName)
            .NotEmpty().WithMessage("用户名不能为空")
            .Length(3, 20).WithMessage("用户名长度需要在3到20个字符之间");

        // 邮箱验证规则:非空,符合邮箱格式
        RuleFor(x => x.Email)
            .NotEmpty().WithMessage("邮箱不能为空")
            .EmailAddress().WithMessage("请输入合法的邮箱地址");

        // 年龄验证规则:大于0,小于120
        RuleFor(x => x.Age)
            .GreaterThan(0).WithMessage("年龄必须大于0")
            .LessThan(120).WithMessage("年龄必须小于120");
    }
}

常用验证规则说明

FluentValidation提供了丰富的内置验证规则,以下是开发中常用的几类:

  • 非空验证:使用NotEmpty()方法,校验字符串、集合、对象等不为空
  • 长度验证:使用Length(min, max)方法,校验字符串的长度范围
  • 数值范围验证:使用GreaterThan()LessThan()InclusiveBetween()等方法,校验数值的合法范围
  • 格式验证:使用EmailAddress()Matches(regex)等方法,校验字符串是否符合指定格式
  • 自定义验证:使用Must(predicate)方法,传入自定义的判断逻辑

触发验证

定义好验证器之后,就可以在业务代码中创建验证器实例并触发验证:

var user = new UserRegisterDto
{
    UserName = "ab",
    Email = "test@ippipp.com",
    Age = 150
};

var validator = new UserRegisterDtoValidator();
var validationResult = validator.Validate(user);

if (!validationResult.IsValid)
{
    // 输出所有验证失败的信息
    foreach (var error in validationResult.Errors)
    {
        Console.WriteLine($"属性 {error.PropertyName} 验证失败:{error.ErrorMessage}");
    }
}
else
{
    Console.WriteLine("数据验证通过");
}

如果是使用依赖注入的项目,可以先在服务配置中注册验证器:

// 在Program.cs或者Startup.cs中注册验证器
builder.Services.AddValidatorsFromAssemblyContaining<UserRegisterDtoValidator>();

之后在需要使用的类中通过构造函数注入验证器即可:

public class UserService
{
    private readonly UserRegisterDtoValidator _validator;

    public UserService(UserRegisterDtoValidator validator)
    {
        _validator = validator;
    }

    public void RegisterUser(UserRegisterDto dto)
    {
        var result = _validator.Validate(dto);
        if (!result.IsValid)
        {
            throw new ArgumentException(string.Join(",", result.Errors.Select(e => e.ErrorMessage)));
        }
        // 执行注册逻辑
    }
}

注意事项

在使用FluentValidation时需要注意,验证规则的配置顺序不影响验证逻辑的执行,所有规则都会被执行。如果需要某个规则失败后就停止后续规则校验,可以在规则后添加StopOnFirstFailure()方法。另外,验证器的实例是线程安全的,在依赖注入场景下可以注册为单例模式,减少对象创建的开销。

FluentValidationC#数据验证验证规则修改时间:2026-06-19 14:27:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。