ABP学习笔记:一起看看后端的校验

84 篇文章 0 订阅

突然想起来自己的校验很多都是前端做的,完全忘了后端也能做校验,写个笔记记录一下,ABP里一般都是使用特性来做校验。

对了,前置笔记:

Angular使用指令来添加校验器_董厂长的博客-CSDN博客

Angular提交表单时,再次验证_董厂长的博客-CSDN博客

失焦校验真SB,尝试使用ES6的Proxy来做校验。_董厂长的博客-CSDN博客

Angular笔记:表单的使用_董厂长的博客-CSDN博客

接下来进入正题。

在web应用中,验证通常 被实现两次:客户端和服务器端。客户端验证的实现主要用于用户体验。首先,最好是在客户端检验表单并且向 用户展示无效的字段。但是,相对于客户端验证,服务器端验证是更重要并且不可缺失的。 服务器端的验证通常是在应用层或者控制器中被实现(通常,所有的服务都是从持久层获取数据)。应用服务中的 方法首先应检测输入数据(有效性)然后使用这些数据。

但是有一说一,实际的开发中前端校验不通过不允许回传数据,那么后端校验也可以不要。: -(

Description 属性

ABP可以使用数据注解来检验数据的有效性。假设我们正在开发一个创建任务的应用服务,并且得到了一个输 入,如下所示:

 public class CreateTaskInput
  {
      public int? AssignedPersonId { get; set; }
      [Required]
      public string Description { get; set; }
  }

在这里 Description 属性被标记为 Required。AssignedPersonId 是可选的。在 System.ComponentModel.DataAnnotations 命名空间中,还有很多这样的特性 ( 例如: MaxLength, MinLength, RegularExpression 等等 )。

自定义检验

如果数据注解的方式不能满足你的需求,你可以实现ICustomValidate接口,请看下面示例:

public class CreateTaskInput : ICustomValidate
  {
      public int? AssignedPersonId { get; set; }
      public bool SendEmailToAssignedPerson { get; set; }
      [Required]
      public string Description { get; set; }
      public void AddValidationErrors(CustomValidatationContext context)
      {
          if (SendEmailToAssignedPerson && (!AssignedPersonId.HasValue || Assigne
  dPersonId.Value <= 0))
          {
              context.Results.Add(new ValidationResult("AssignedPersonId must be
  set if SendEmailToAssignedPerson is true!"));
          }
        }
}

ICustomValidate 接口声明了一个可被实现的 AddValidationErrors 方法。如果有验证错误的话,我们必须添加 ValidationResult 对象到 context.Results 列表。如果需要的话,你也可以使用 context.IocResolver 来解决依 赖关系。
除了 ICustomValidate 接口,ABP也对.NET标准的 IValidatableObject 接口提供支持。你也可以实现它来执行 自定义验证。如果你实现了这两个接口,那么这两个接口的方法都会被调用。

官方完整文档:

System.ComponentModel.DataAnnotations 命名空间 | Microsoft Docsicon-default.png?t=M3K6https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations?view=net-6.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值