验证
ABP与ASP.NET Core模型验证系统系统兼容,模型验证文档中的内容对于基于ABP应用程序同样有效.所以本文主要集中在ABP特征,而不是重复微软文档.
ABP增加了以下优点:
- 定义 向任意类添加自动验证. 所有的都实现了该接口,所以它们会被自动验证.
- 自动将数据注解属性的验证错误信息本地化.
- 提供FluentValidation的集成.
本节简要介绍了验证系统.有关详细信息请参阅.
使用数据注解是一种以声明式对DTO进行验证的简单方法. 示例 :
IValidatableObject
IValidatableObject
can be implemented by a DTO to perform custom validation logic. CreateBookDto
in the following example implements this interface and checks if the Name
is equals to the Description
and returns a validation error in this case. 可以将DTO实现 IValidatableObject
接口进行自定义验证逻辑. 下面的示例中 CreateBookDto
实现了这个接口,并检查 Name
是否等于 Description
并返回一个验证错误.
解析服务
如果你需要从解析服务,可以使用 ValidationContext
对象. 例:
本节介绍了ABP框架提供的一些额外的服务.
ABP框架使用动态代理/拦截系统来执行验证.为了使其工作,你的方法应该是 virtual 的,服务应该被注入并通过接口(如
IMyService
)使用.
AbpValidationException
一旦ABP确定了一个验证错误,它就会抛出类型为 AbpValidationException
的异常. 你的应用程序代码可以抛出 AbpValidationException
,但大多数情况不会使用它.
ValidationErrors
是AbpValidationException
的属性,它包含了验证错误列表.AbpValidationException
的日志级别设置为Warning
. 它将所有验证错误记录到日志系统.AbpValidationException
由ABP框架自动捕获并将HTTP状态码设置为400转换成可用的错误响应. 参阅文档了解更多.
除了自动验证你可能需要手动验证对象,这种情况下注入并使用 服务:
Validate
方法根据验证规则验证给定对象,如果对象没有被验证通过会抛出AbpValidationException
异常.GetErrors
不会抛出异常,只返回验证错误.
IObjectValidator
默认由 ObjectValidator
实现. ObjectValidator
是可扩展的; 可以实现IObjectValidationContributor
接口提供自定义逻辑. 示例 :
- ABP会自动发现验证类,并用于任何类型的对象验证(包括自动方法调用验证).
IMethodInvocationValidator
Volo.Abp.FluentValidation 包将FluentValidation库集成到了验证系统(通过实现 IObjectValidationContributor
). 请参阅FluentValidation集成文档了解更多信息.