首页 > 其他分享 >使用参数属性对.Net WebApi参数校验

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

时间:2023-07-21 17:24:01浏览次数:47  
标签:WebApi 校验 参数 提示信息 使用 注解 Net 属性

.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/

标签:WebApi,校验,参数,提示信息,使用,注解,Net,属性
From: https://www.cnblogs.com/mq0036/p/17571978.html

相关文章

  • Hibernate初始化时在OneToOneSecondPass类中出现NullPointerException
    启动项目 Hibernate随即报错Causedby:java.lang.NullPointerException   atorg.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)  原因: 主类方,无外键方@OneToOne(mappedBy="carveEReviewproject",targetEntity=CarveEReviewcomment.cla......
  • ie6下报Internet Explorer cannot open the Internet site 错误
     ie6下报InternetExplorercannotopentheInternetsite错误  今天在ie6上测试项目,点击一个连接后报错:InternetExplorercannotopentheInternetsite 1、起初是认为body没有加载完就执行了js代码,修改了之后还是不行。 2、将js移动到</html>之后还是无效。 3、删除了......
  • OpenCV实现ResNet18推理
    前一篇实现了ResNet18训练自定义数据集,详细介绍了数据集制作、模型构建及训练,并且介绍了相应模块如何可视化。前面训练阶段是在python环境下进行的,但实际工程部署的时候大都采用C++实现推理,这一篇我们借助OpenCV实现ResNet18推理。一、准备1、OpenCV编译及安装借助OpenCV实现Re......
  • 【Dotnet 工具箱】推荐一个使用 C# 开发的轻量级压测工具
    你好,这里是Dotnet工具箱,定期分享Dotnet有趣,实用的工具和组件,希望对您有用!轻量级压测工具LoadTestToolbox是一个使用C#开发的轻量级压测工具,基于.NET6版本,和其他压测工具相比,LoadTestToolbox安装和使用都非常简单。LoadTestToolbox提供了一种可靠的方式来模拟高负......
  • .Net 一套接口多实现
    .Net一套接口多实现接口(interface)可理解为规范、标准、协议。接口是用来约束各方都在同一组规范下工作。电脑外设USB接口,各个品牌商家生产的U盘、鼠标都能够被电脑主板识别并工作,这是因为个生产商都遵循实现了USB接口协议。在编程中接口应用非常广泛,例如IDbConnection接口,这......
  • 从零开始针对 .NET 应用的 DevOps 运营实践 - enkins & SonarQube自动化
    从零开始针对.NET应用的DevOps运营实践-MSbuild&Java环境搭建 一、Overview#最近的一段时间,在公司里我都在进行基于Jenkins和SonarQube配合已有的Gitlab搭建部门的持续集成环境的工作,虽然之前有使用过GitHubActions和AzureDevOps,但是从头开始搭建这样的一......
  • 基准测试工具 --- BenchmarkDotNet
    介绍今天介绍一个非常强大的基于.Net的基准测试工具BenchmarkDotNet。BenchmarkDotNet已经被14300多个项目采用,包括非常多的知名开源项目,例如dotnet/performance(.Net所有运行时的基准测试项目)dotnet/runtime(.Net运行时库),Roslyn(c#和VisualBasic编译器),Mono、ASP.NET......
  • 基准测试工具 --- BenchmarkDotNet
    介绍今天介绍一个非常强大的基于.Net的基准测试工具BenchmarkDotNet。BenchmarkDotNet已经被14300多个项目采用,包括非常多的知名开源项目,例如dotnet/performance(.Net所有运行时的基准测试项目)dotnet/runtime(.Net运行时库),Roslyn(c#和VisualBasic编译器),Mono、ASP.NET......
  • pythonETL案例
    PythonETL案例的实现流程ETL(Extract,Transform,Load)是指从数据源抽取数据,对数据进行转换,然后将数据加载到目标数据库或数据仓库中的一种常见数据处理过程。在本篇文章中,我将教会你如何使用Python实现一个简单的ETL案例。一、整体流程下面是整个ETL案例的流程,我们将按照以下步......
  • pytest 参数化
    [email protected]('a,b,sum',[#参数化出来3组数据(1,2,3),(2,3,5),(3,-19,-16)])deftest_add(a,b,sum):asserta+b==sum#如果名称等于main输出pytest.main([文档,sv参数])if__name__=='__main__':pytest.main([__......