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

相关推荐
你三大爷19 分钟前
Safepoint的秘密探寻
java·后端
福大大架构师每日一题34 分钟前
2025-10-02:不同 XOR 三元组的数目Ⅰ。用go语言,给你一个长度为 n 的数组 nums,数组恰好包含 1 到 n 这 n 个整数(每个数出现一次)
后端
王嘉俊9251 小时前
Django 入门:快速构建 Python Web 应用的强大框架
前端·后端·python·django·web·开发·入门
拾忆,想起1 小时前
RabbitMQ死信交换机:消息的“流放之地“
开发语言·网络·分布式·后端·性能优化·rabbitmq
IT_陈寒2 小时前
Redis性能翻倍的5个冷门技巧,90%的开发者从不知道第3点!
前端·人工智能·后端
uhakadotcom3 小时前
入门教程:常用的 Python 第三方库:python-logstash
后端·面试·github
掘金一周3 小时前
🍏让前端去做 iPhone 的液态玻璃❓ | 掘金一周 10.2
前端·人工智能·后端
9号达人3 小时前
Java19 新特性详解与实践
java·后端·面试
银剑3 小时前
微服务安全认证演进之路:增强型Bearer Token架构实战
后端
绝无仅有4 小时前
资深面试之MySQL 问题及解答(一)
后端·面试·github