You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类库中的Fluent Validator在ASP.NET Core中无法正常工作

问题排查与解决方案

1. 确认类库引用与版本一致性

  • ASP.NET Core项目必须直接引用包含验证器的类库项目(或通过NuGet包引用已编译类库)。右键Web项目→「添加」→「项目引用」,勾选目标类库。
  • 确保类库与Web项目使用完全相同版本的FluentValidation包,版本不匹配会导致验证器无法被识别。

2. 修复程序集扫描逻辑

AddValidatorsFromAssemblyContaining<PersonValidator>()可能因程序集加载问题失效,可显式指定类库程序集:

var validatorAssembly = typeof(PersonValidator).Assembly;
services.AddFluentValidationAutoValidation(M =>
{
    M.DisableDataAnnotationsValidation = true;
}).AddFluentValidationClientsideAdapters()
  .AddValidatorsFromAssembly(validatorAssembly);

同时检查类库输出设置:右键类库项目→「属性」→「生成」,确保输出路径正确,且Web项目依赖项中该类库的「复制本地」设置为True。

3. 验证客户端验证脚本完整性

客户端验证依赖jQuery相关脚本,确保视图/布局中包含以下引用:

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

且表单中使用asp-for标签助手生成字段,确保验证属性正确输出:

<div class="form-group">
    <label asp-for="Name"></label>
    <input asp-for="Name" class="form-control" />
    <span asp-validation-for="Name" class="text-danger"></span>
</div>

4. 检查验证器访问修饰符

确保PersonValidator为public修饰符(你的代码已满足),internal修饰的验证器无法被跨程序集扫描识别。

5. 调试验证器注册状态

在Program.cs中添加调试代码,验证验证器是否成功注册:

var serviceProvider = services.BuildServiceProvider();
var validator = serviceProvider.GetService<IValidator<Person>>();
// 若validator为null,说明注册失败,回溯前几步排查

内容的提问来源于stack exchange,提问作者Ebrahim Ramzany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:39:26