要在 另一个 API 项目中复用你在 Blazor 项目中定义的 FluentValidation 验证规则

要在 另一个 API 项目中复用你在 Blazor 项目中定义的 FluentValidation 验证规则 ,你只需要将验证器类与模型类一起提取到一个 共享类库(Shared Library) 中,然后在 API 项目中引用它即可。以下是具体步骤:


✅ 步骤一:创建共享类库项目(推荐命名为 .Shared.Contracts

  1. 新建类库项目(如 MyApp.Shared)。
  2. 将模型类(如 UserDto)和对应的验证器类(如 UserDtoValidator)迁移到这个类库中。
csharp 复制代码
// MyApp.Shared/Models/UserDto.cs
public class UserDto
{
    public string Email { get; set; }
    public string Password { get; set; }
}

// MyApp.Shared/Validators/UserDtoValidator.cs
using FluentValidation;

public class UserDtoValidator : AbstractValidator<UserDto>
{
    public UserDtoValidator()
    {
        RuleFor(x => x.Email).NotEmpty().EmailAddress();
        RuleFor(x => x.Password).MinimumLength(6);
    }
}

✅ 步骤二:在 API 项目中引用共享类库

bash 复制代码
dotnet add reference ../MyApp.Shared/MyApp.Shared.csproj

✅ 步骤三:在 API 项目中安装 FluentValidation 支持

bash 复制代码
dotnet add package FluentValidation.AspNetCore

✅ 步骤四:在 API 的 Program.cs 中注册验证器

csharp 复制代码
builder.Services.AddControllers()
    .AddFluentValidation(fv =>
    {
        fv.RegisterValidatorsFromAssemblyContaining<UserDtoValidator>();
    });

RegisterValidatorsFromAssemblyContaining<T>() 会自动扫描并注册 UserDtoValidator 以及所有继承自 AbstractValidator<T> 的类。


✅ 可选:统一验证失败格式(推荐)

你可以通过配置 ApiBehaviorOptions 来统一 API 返回格式:

csharp 复制代码
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
    options.InvalidModelStateResponseFactory = context =>
    {
        var errors = context.ModelState
            .SelectMany(x => x.Value.Errors)
            .Select(e => e.ErrorMessage)
            .ToList();

        return new BadRequestObjectResult(new
        {
            Success = false,
            Errors = errors
        });
    };
});

✅ 最终结构示意

markdown 复制代码
/MyApp.Shared
├── Models
│   └── UserDto.cs
└── Validators
    └── UserDtoValidator.cs

/MyApp.Api
├── Controllers
│   └── UsersController.cs
└── Program.cs

✅ 总结

项目 说明
共享模型/验证器 放在 .Shared 类库中
API 项目引用 通过项目引用或 NuGet 包
验证器注册 使用 RegisterValidatorsFromAssemblyContaining<T>()
验证逻辑复用 无需重复代码,模型+验证器一处定义,多处使用

这样,你的 FluentValidation 规则就可以在 Blazor 和任意 API 项目中共享使用,保持验证逻辑一致性。

相关推荐
用户9385156350715 小时前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
用户9385156350715 小时前
实战 Todo CRUD —— 从路由到异常,手写一个完整模块
后端·typescript·nestjs
GetcharZp16 小时前
Qdrant 向量数据库 Golang 实战指南:从零构建高性能检索应用
后端
hsfxuebao16 小时前
OpenSpec 完整使用流程笔记 (SDD)
后端
唐青枫16 小时前
别把 struct 只当成数据盒子:Zig 结构体从入门到实战
后端
why技术17 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
北斗落凡尘17 小时前
LangGraph 入门实战(9)--中断
后端·langchain
CodeSheep17 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
IT_陈寒18 小时前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端
SomeB1oody19 小时前
【RustyML入门】4.2. 标准化与归一化
开发语言·后端·机器学习·rust·教程