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

相关推荐
IT_陈寒2 小时前
Python的多线程就是个假把式,我算是体验到了
前端·人工智能·后端
码事漫谈2 小时前
如果 AI 要圈养人类,它可能不需要笼子
后端
newerp3 小时前
Golang 调度循环:Go runtime 如何永不停歇地找人干活
后端·程序员·go
明月_清风3 小时前
AI 时代,为什么架构师又开始谈"本体论"?
人工智能·后端·agent
行百里er4 小时前
BeanPostProcessor:包装 Feign Client
spring boot·后端·监控
花生了什么事o5 小时前
自定义Spring Boot Starter全流程
java·spring boot·后端
云上小朱5 小时前
开发测试环境-Kubernetes离线部署指南
后端
遨翔在知识的海洋里5 小时前
nestjs(1)-模块的相互调用
后端