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
相关产品推荐
相关产品推荐

