要在 另一个 API 项目中复用你在 Blazor 项目中定义的 FluentValidation 验证规则 ,你只需要将验证器类与模型类一起提取到一个 共享类库(Shared Library) 中,然后在 API 项目中引用它即可。以下是具体步骤:
✅ 步骤一:创建共享类库项目(推荐命名为 .Shared
或 .Contracts
)
- 新建类库项目(如
MyApp.Shared
)。 - 将模型类(如
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 项目中共享使用,保持验证逻辑一致性。