闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法

简介: 闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法

前言

除了使用 ASP.NET Core 内置框架来校验数据,事实上,通过很多第三方框架校验数据,更具优势。

比如 FluentValidation,FluentValidation 是第三方的数据校验框架,具有许多优势,是开发人员首选的数据校验工具之一。

以下列举 FluentValidation 的一些优势:

  1. FluentValidation 使用 Fluent 方式配置校验规则,通过链式调用方法,使得编写校验规则变得非常直观和易于理解,可以轻松地构建复杂的校验规则
  2. FluentValidation 内置更多的校验规则,可以满足各种复杂的数据校验需求
  3. FluentValidation 更方便扩展自定义规则,实现校验逻辑的重用,提高代码的可维护性和复用性
  4. FluentValidation 与 ASP.NET MVC、ASP.NET Core、Web API 等框架无缝集成,数据校验和验证可以轻松地与应用程序的其他部分进行交互
  5. FluentValidation 支持根据具体的校验规则和场景来定义更加友好和具体的错误消息,提高用户体验
  6. FluentValidation 的校验规则更容易进行单元测试

Step By Step 步骤

  1. 创建一个 Asp.Net Core WebApi 项目
  2. 引用以下 Nuget 包

FluentValidation.AspNetCore

3.创建 Login 操作方法的请求参数模型类 LoginRequest

// LoginRequest 类只是一个普通的 C# 类,
// 没有标注任何的 Attribute 或者实现任何的接口,
// 它的唯一责任就是传递数据
public record LoginRequest(string Email, string Password, string PasswordConfirm);

4.编写继承自AbstractValidator的数据校验类,留意注释

using FluentValidation;
// 数据校验类要继承自 AbstractValidator
// 通过 AbstractValidator 的泛型参数指定对哪个类进行校验
public class LoginRequestValidator: AbstractValidator<LoginRequest>
{
  // 校验规则写到校验类的构造方法中
  public LoginRequestValidator()
  {
    // 通过RuleFor来指定要对哪个属性进行校验
    // 多个校验规则可以采用链式调用的写法
    // 每个需要校验的属性对应一组RuleFor调用
    RuleFor(x => x.Email)
      .NotNull()
      .EmailAddress()
      // 在Must方法中编写自定义校验规则,
      .Must(v => v.EndsWith("@qq.com") || v.EndsWith("@163.com"))
      // 通过WithMessage方法自定义报错信息,
      // WithMessage方法设置的报错信息只作用于它之前的那个校验规则
      .WithMessage("只支持QQ和163邮箱");
    RuleFor(x => x.Password)
      .NotNull()
      .Length(3, 10).WithMessage("密码长度必须介于3到10之间")
      .Equal(x => x.PasswordConfirm).WithMessage("两次密码必须一致");
  }
}

5.打开 Program.cs,注册 FluentValidation 服务

using FluentValidation;
using FluentValidation.AspNetCore;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
Assembly assembly = Assembly.GetExecutingAssembly();
builder.Services.AddFluentValidationAutoValidation()
  .AddFluentValidationClientsideAdapters()
  .AddValidatorsFromAssembly(assembly);
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
  app.UseSwagger();
  app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

6.打开登录请求控制器,编写 Login API

using Microsoft.AspNetCore.Mvc;
namespace FluentValidationSample.Controllers
{
  [ApiController]
  [Route("[controller]/[action]")]
  public class TestController : ControllerBase
  {
    [HttpPost]
    public ActionResult Login(LoginRequest req)
    {
      return Ok();
    }
  }
}

总结

  1. FluentValidation 把数据校验的规则写到单独的数据校验类中,这样模型类和数据校验类各司其职,符合 “单一职责原则”
  2. 在 FluentValidation 中编写自定义校验代码更加简单
  3. FluentValidation 和 .NET Core 内置的校验方式是可以共存的,也就是可以一部分校验规则用 FluentValidation 写,另一部分校验规则用 .NET Core 内置的校验方式写(不建议)。


相关文章
|
18天前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
28天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
28天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
64 3
|
8天前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
1月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
86 6
|
1月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
34 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
47 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
40 0
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?