要在 另一个 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 项目中共享使用,保持验证逻辑一致性。

相关推荐
架构技术专栏4 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
码事漫谈4 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan5 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan5 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe6 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe6 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
A接拉起0076 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
Bazingga7 小时前
RAG评测体系保姆级教程:生产级实践指南
后端
tachibana28 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
蜗牛互联网8 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端