验证

    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,但大多数情况不会使用它.

    • ValidationErrorsAbpValidationException 的属性,它包含了验证错误列表.
    • AbpValidationException 的日志级别设置为 Warning. 它将所有验证错误记录到日志系统.
    • AbpValidationException 由ABP框架自动捕获并将HTTP状态码设置为400转换成可用的错误响应. 参阅文档了解更多.

    除了自动验证你可能需要手动验证对象,这种情况下注入并使用 服务:

    • Validate 方法根据验证​​规则验证给定对象,如果对象没有被验证通过会抛出 AbpValidationException 异常.
    • GetErrors 不会抛出异常,只返回验证错误.

    IObjectValidator 默认由 ObjectValidator 实现. ObjectValidator是可扩展的; 可以实现IObjectValidationContributor接口提供自定义逻辑. 示例 :

    • ABP会自动发现验证类,并用于任何类型的对象验证(包括自动方法调用验证).

    IMethodInvocationValidator

    Volo.Abp.FluentValidation 包将FluentValidation库集成到了验证系统(通过实现 IObjectValidationContributor). 请参阅FluentValidation集成文档了解更多信息.