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

Fluent Validation过时API替换后验证失效问题求助

解决Fluent Validation替换注册方式后验证失效问题

原配置代码因过时拆分后,自定义错误响应的验证功能失效,核心问题在于仅注册了验证器实例,未完成FluentValidation与ASP.NET MVC的集成配置。

问题根源

原来的AddFluentValidation扩展方法不仅负责注册验证器,还会自动向MVC注入FluentValidationModelValidatorProvider,让MVC框架能识别并触发FluentValidation的验证逻辑。而单独调用AddValidatorsFromAssemblyContaining只完成了验证器的依赖注入注册,没打通与MVC的关联,导致自定义ValidationFilter无法捕获验证错误。

另外注意原代码中的拼写错误:entity2Validato应为entity2Validator,这会导致该实体的验证器无法被正确注册。

解决方案

方案一:使用官方集成方法(推荐)

在自定义扩展中添加自动集成配置,同时批量注册验证器:

services.AddMvc(options => options.Filters.Add<ValidationFilter>());
services.AddFluentValidationNjsm(Configuration);

public static IServiceCollection AddFluentValidationNjsm(this IServiceCollection services, IConfiguration configuration)
{
    // 启用FluentValidation与ASP.NET MVC的自动集成
    services.AddFluentValidationAutoValidation();
    // 可选:添加客户端验证适配(如需前端验证支持)
    services.AddFluentValidationClientsideAdapters();

    // 注册指定程序集内的所有验证器,一个AssemblyContaining即可覆盖同程序集的所有验证器
    services.AddValidatorsFromAssemblyContaining<entity1Validator>();
    // 若验证器分散在不同程序集,再添加对应AssemblyContaining
    // services.AddValidatorsFromAssemblyContaining<OtherValidatorInAnotherAssembly>();
    
    return services;
}

方案二:手动配置MVC验证提供器

如果需要保持手动逐个注册验证器的方式,需手动向MVC添加FluentValidation的模型验证提供器:

services.AddMvc(options => {
    options.Filters.Add<ValidationFilter>();
    // 手动添加FluentValidation的模型验证提供器
    options.ModelValidatorProviders.Add(new FluentValidationModelValidatorProvider());
});

public static IServiceCollection AddFluentValidationNjsm(this IServiceCollection services, IConfiguration configuration)
{
    // 修正拼写错误:entity2Validato → entity2Validator
    services.AddValidatorsFromAssemblyContaining<entity1Validator>();
    services.AddValidatorsFromAssemblyContaining<entity2Validator>();
    services.AddValidatorsFromAssemblyContaining<entity3Validator>();
    
    return services;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:26