使用参数属性对.Net WebApi参数校验

发布时间 2023-07-21 17:12:57作者: jack_Meng

.Net WebApi进行优雅的参数校验

受到了spring boot中注解校验参数的启发,于是想,难道微(巨)软(硬)的.net不行吗? 于是有了本次尝试。

当我们日常开发webapi接口时,难免会有一堆参数校验,例如校验参数是否为空,密码长度……

条件校验

一般的操作是下面这样的:

image

emm……目前这是2个字段参数,如果参数很多,那这个老太太裹脚布一般的 if 条件,看着就很难受(当然这样写丝毫没有问题)。响应结果如下:

image

image


属性校验

说完了一般的操作,那不一般的操作是啥样?

在dto参数对象的字段加上校验属性,然后我们可以甩掉裹脚布了,放心大胆的写代码了。

image

image

屏蔽了if条件之后,响应结果如下:

image

可以看到,直接就是参数无效,返回状态码400。输入部分参数之后结果如下:

image

完整正确的输入参数之后,请求通过:

image


看到这,想必会有个疑问,这是 post 请求,参数在 body 里边,有字段。那要是 get 请求,参数在 url 里,没有字段,怎么加属性校验?

继续往下看

image

可以看到,属性依然可以使用的啦~,响应结果如下:

image

image

使用属性的方式来进行参数校验,是不是很优雅呢?这样减少了很多的 if 条件代码,代码也会清爽干净不少,赶紧用起来吧。


属性说明

使用注解需要添加 System.ComponentModel.DataAnnotations 命名空间,在VS中,正确键入属性后,会自动提示添加引用的。

注意看这个库的名称 DataAnnotations -数据注解。那为什么又叫属性呢,因为我们上面使用的注解(属性)都是以Attribute后缀的,且都派生自属性基类 Attribute,只不过在使用时,编辑器自动隐藏了后缀。因此从名称上看叫它属性,似乎更合理(纯属个人瞎猜,也可能是微软向跟java中注解区分开吧=.=),本文中注解和属性意义相同

可以看到这个库中有很多属性

image

这里对上面的代码中使用到的属性进行说明:

  • Required : 表示必须,此参数非空,ErrorMessage 是错误提示信息
  • MaxLength :最大长度,可指定最大长度 ,错误提示信息
  • MinLength : 最小长度,可指定最小长度,错误提示信息
  • FromBody : 表示参数放入 body 中进行传递
  • FromUri : 表示参数作为 url 一部分

 

 

 

出处:https://www.nhit.icu/archives/68/