要在 另一个 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 行者4 分钟前
Spring Framework 6.x 异常国际化完全指南:让错误信息“说“多国语言
java·后端·spring·异常处理·problemdetail·国际化i18n
Victor3561 小时前
Hibernate(18)Hibernate的延迟加载是什么?
后端
Victor3561 小时前
Hibernate(17)什么是Hibernate的悲观锁?
后端
一只叫煤球的猫1 小时前
并行不等于更快:CompletableFuture 让你更慢的 5 个姿势
java·后端·性能优化
Codebee1 小时前
深入揭秘Ooder框架信息架构中的钩子机制:从原理到企业级实践
后端
cike_y1 小时前
Spring使用注解开发
java·后端·spring·jdk1.8
小蒜学长1 小时前
python餐厅点餐系统(代码+数据库+LW)
数据库·spring boot·后端·python
CodeAmaz1 小时前
Spring Boot 项目使用 Elasticsearch 详细指南
spring boot·后端·elasticsearch
彭于晏Yan1 小时前
Springboot集成Hutool导出CSV
java·spring boot·后端
wanghowie2 小时前
02.01 Spring Boot|自动配置机制深度解析
android·spring boot·后端