提升.Net API的健壮性:FluentValidation实战教程,轻松搞定数据校验!
内容提要
本文介绍了如何在.Net项目中使用FluentValidation库进行模型验证。首先介绍了FluentValidation的引入与设置,然后详细介绍了在Startup类中进行相应配置以使用FluentValidation的步骤。接着介绍了如何在模型上编写验证器,并在控制器中应用验证器进行自动验证。最后提到了FluentValidation提供的内置验证规则和如何实现自定义验证逻辑。
延伸解读
验证器注册的两种程序集方式
文章展示了通过程序集注册验证器的两种方式:一种使用RegisterValidatorsFromAssemblyContaining指定具体类型,另一种使用RegisterValidatorsFromAssembly加载当前程序集和Domain程序集。后者适合验证器分散在多个项目中的场景,但需注意程序集名称的替换逻辑(如将Api替换为Domain),确保加载正确。
关闭默认MVC验证的影响
配置中设置了RunDefaultMvcValidationAfterFluentValidationExecutes = false,这意味着FluentValidation执行后不再运行基于特性的默认MVC验证。如果项目中同时存在DataAnnotations特性,这些验证将被忽略。开发者需确保所有验证逻辑已迁移到FluentValidation,避免遗漏。
自定义错误响应的统一格式
通过重写InvalidModelStateResponseFactory,文章将验证失败响应统一为包含code、message和data字段的JSON对象,其中data收集所有错误信息。这种做法便于前端统一处理错误,但需注意错误信息来自ModelState,可能包含多个字段的验证消息,需确保其结构符合API契约。
自定义验证逻辑的扩展点
文章提到对于复杂规则(如bizcaseid校验),可以编写自定义验证方法并在验证器中使用。这体现了FluentValidation的灵活性:内置规则覆盖常规检查,而自定义方法可处理业务特定的校验。实现时需注意将自定义逻辑封装为可复用的方法,并在验证器中通过RuleFor调用。
Q&A
如何在 .NET 项目中安装 FluentValidation?
可以通过 NuGet 包管理器安装 FluentValidation.AspNetCore,执行命令:dotnet add package FluentValidation.AspNetCore,或在 NuGet 包管理器中搜索并安装。
在 Startup 类中如何配置 FluentValidation 服务?
在 ConfigureServices 方法中调用自定义的 InitValidation 方法,使用 services.AddControllersWithViews().AddFluentValidation(config => { ... }) 进行配置,包括注册验证器程序集和设置 RunDefaultMvcValidationAfterFluentValidationExecutes 等。
如何编写一个 FluentValidation 验证器?
创建一个继承自 AbstractValidator<T> 的类,其中 T 是模型类型,在构造函数中使用 RuleFor 等方法定义验证规则。
FluentValidation 验证失败时如何返回自定义错误信息?
在 Startup 中配置 ApiBehaviorOptions,设置 InvalidModelStateResponseFactory 来重写模型验证错误响应,从 ModelState 中提取错误信息并返回包含 code、message 和 data 的 BadRequestObjectResult。
FluentValidation 支持哪些内置验证规则?
FluentValidation 提供了许多内置验证规则,如 RuleFor 用于常规数据规则检查,具体可参考官方文档。
如何实现自定义验证逻辑?
可以编写自定义的验证方法,并在验证器中使用它们,以实现复杂的验证逻辑。