闲话 ASP.NET Core 数据校验(一):内置数据校验

iamge

前言

所谓输入的是垃圾,输出也必然是垃圾,有多少安全问题隐藏在请求的数据中,所以永远不能相信来自用户端的输入。

对请求数据的合法性进行校验,不仅有助于提升用户界面的友好性,而且有助于提高后台程序的安全性和稳定性。

ASP.NET Core 主要通过内置的 DataAnnotations 实现对数据进行校验,DataAnnotations 是一组属性类,用于为模型类的属性添加验证规则,如必填、最大长度、正则表达式等,使用时非常方便,请看下面的 Step By Step 例子:

Step By Step 步骤

  1. 创建一个 Asp.Net Core WebApi 项目

  2. 创建 Login 操作方法的请求参数类 LoginRequest

    using System.ComponentModel.DataAnnotations;
    
    public class LoginRequest
    {
    	// 直接对类属性设置数据内置检验
    	[Required]
    	[EmailAddress]
    	[RegularExpression("^.*@(qq|163)\\.com$", ErrorMessage = "只支持QQ和163邮箱")]
    	public string Email { get; set; }
    
    	[Required]
    	[StringLength(10, MinimumLength = 3)]
    	public string Password { get; set; }
    
    	[Compare(nameof(Password), ErrorMessage = "两次密码必须一致")]
    	public string PasswordConfirm { get; set; }
    }
    
  3. 打开登录请求控制器,编写 Login API

    using Microsoft.AspNetCore.Mvc;
    
    namespace DatavalidSample.Controllers
    {
    	[ApiController]
    	[Route("[controller]/[action]")]
    	public class TestController : ControllerBase
    	{
    		// 执行时,自动对 LoginRequest 进行数据校验
    		[HttpPost]
    		public ActionResult Login(LoginRequest req)
    		{
    			return Ok(req);
    		}
    	}
    }
    

总结

  1. ASP.NET Core 内置数据校验使用起来非常简单,只需通过一些特性标记即可定义验证规则,不需要编写大量自定义代码

  2. 内置数据校验功能与 ASP.NET Core 框架紧密集成,可以方便地与 MVC、Web API 等组件结合使用

  3. 使用 DataAnnotations 特性标记,符合标准化的数据校验规范,易于理解和维护

  4. 内置的 DataAnnotations 特性提供了各种常用的验证规则,如必填、范围、正则表达式等,满足大部分常见的数据校验需求

总的来说,ASP.NET Core 内置数据校验功能适用于大多数简单的数据校验需求,能够提高开发效率和代码可维护性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区块链安全应用------压力测试

测试要求: 1. 对以下AccountManager智能合约进行压测(基础要求set函数测试,balanceOf涵为20分加分项)2. 在本地链进行测试,需要监控本地进程的资源使用情况。每个进程的multiOutput属性为Avg3. 需要将每一个更改的配置文件截图,和…

初入数据库

SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。 DDL(Data Definition Language)数据定义语言 数据库 show databases;create database db01;use db01;select database(); 显示当前使用的数据库drop d…

制作一个RISC-V的操作系统十三-抢占式多任务和兼容协作式多任务

文章目录 强占式多任务流程代码具体流程兼容协作式多任务(软中断)寄存器 msip流程代码结果 强占式多任务 流程 抢占式多任务由计时器中断触发,最后在处理程序中切换到下一个进程 代码具体流程 上下文中增加pc寄存器 寄存器保留上下文和切…

AI计算中的光学模块:波分复用器的应用前景

在人工智能(AI)的计算领域,光学模块扮演着至关重要的角色。随着AI技术的飞速发展,对数据处理速度和带宽的需求日益增长。光学模块,特别是波分复用器(WDM),因其高速、大容量的数据传输…

实战技巧:Android 14适配从挂号到出院

公众号「稀有猿诉」 原文链接 实战技巧:Android 14适配从挂号到出院 啥?这都4202年了,你的应用还没有升级到targetSDK 34?莫慌,本文就带着你全面的了解升级targetSDK 34的方法以及避坑指南。 注意,A…

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络,为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是?神经网络激活函数?为什么在深度学习中常进行finetuning画GRU结构图什么是…

JavaEE初阶之IO流快速顿悟一(超详细)

目录 题外话 正题 IO流 Java.io.FileInputStream int read() int read(byte[] b) 关于异常 Java7的新特性: try-with-resources ( 资源自动关闭) Java.io.FileOutputStream void write(int b) void write(byte[] b) 小结 题外话 十年青铜无人问,一朝顿悟冲王者 前天…

网工内推 | 深圳网工专场,上市公司、国企,安全认证优先

01 深圳市同为数码科技股份有限公司武汉分公司 招聘岗位:网络工程师 职责描述: 1、负责网络设备的管理、调试、配置、维护等; 2、负责信息安全网络安全设备、系统的运维; 3、负责整体网络系统技术的相关工作,包括架构…

使用C++实现尾插式循环链表结构

在编码中避免不了使用链表,特别是循环链表,很多同学使用时为了省事直接使用C STL库中的链表实现,这样当然很简单也不容易出错,但同时也不可避免的带来了一些问题: 是半个黑盒,虽然能看源码,但是…

如何免费生成网址二维码?支持自定义设计的二维码生成器

在国内外的许多创意广告中都在使用网址二维码。比如:大众汽车隐藏在汽车零件上的企业招聘二维码,扫码后进入大众汽车官网在线申请投递简历;帕森斯设计学院的户外广告中打印在红色沙滩椅上的二维码,扫描后可以在线申请暑期课程&…

详细分析mysqlslap的基本知识 | 压力测试(附Demo)

目录 前言1. 基本知识2. 参数解读2.1 auto-generate-sql2.2 only-print2.3 iterations2.4 并发处理参数 前言 对数据库进行压力测试,对此补充这方面的详细知识点 1. 基本知识 mysqlslap 是 MySQL 自带的用于模拟数据库负载的压力测试工具 可以模拟多个客户端并发…

【Java | 多线程】LockSupport 的使用和注意事项

了解一下 LockSupport LockSupport是一个类,位于java.util.concurrent.locks包中,提供了基本的线程同步机制。 LockSupport的主要作用是挂起和唤醒线程。它提供了两个主要的静态方法:park()和unpark()。 park():用于挂起当前线…

AI论文速读 |从图结构角度统一车道级交通预测:基准和基线

题目:Unifying Lane-Level Traffic Prediction from a Graph Structural Perspective: Benchmark and Baseline 作者:Shuhao Li, Yue Cui, Jingyi Xu, Libin Li, Lingkai Meng, Weidong Yang(杨卫东), Fan Zhang, Xiaofang Zhou(周晓方) 机构&#xff…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为: Python函数的黑魔法:递归,嵌套函数与装饰器 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给个一键三连&#xff…

redis基于Stream类型实现消息队列,命令操作,术语概念,个人总结等

个人大白话总结 1 在Redis Stream中,即使消息被消费者确认(acknowledged, ACK),消息也不会自动从Stream数据结构中删除。这与Kafka或RabbitMQ等传统消息队列系统的做法不同,在那些系统中,一旦消息被消费并…

废液收集系统物联网远程监控解决方案

废液收集系统物联网远程监控解决方案 在面对日益严峻的环保压力和严格的法律法规要求下,构建一套高效、智能的废液收集系统物联网远程监控解决方案显得尤为重要。该方案旨在通过深度融合物联网技术、云计算、大数据分析等先进手段,实现对废液收集系统的…

RuoYi-Vue-Plus (SaToken 注解鉴权)

一、SaInterceptor 注解鉴权和路由拦截鉴权 拦截器:SaInterceptor 实现类位置: cn.dev33.satoken.interceptor.SaInterceptor 功能:Sa-Token 综合拦截器,提供注解鉴权和路由拦截鉴权能力 /*** 创建一个 Sa-Token 综合拦截器&…

测试用例设计方法-异常测试

飞的最高的海鸥,能看到最远的奇景。大家好,继续给大家分享如何进行异常测试,首先要做好异常测试,需要我们对被测系统进行全面的了解,熟悉被测系统的功能、架构和运行机制,然后在这个基础上尽可能覆盖各种的…

再谈“协议”

1.认识协议 之前我们使用TCP的方式实现了一个服务器,而TCP是面向字节流的,而UDP是面向数据报的,接下来通过一个例子区分两种的区别。 UDP面向数据报:就如同发快递,你发多少个快递,对面就收到多少个快递&am…

探索React Router:实现动态二级路由

我有一个路由配置的二维数组,想根据这个数组结合路由组件来动态生成路由,应该怎么样实现。在 React Router 6 中渲染二级路由的方式跟 React Router 65相比有一些变化,但核心思路仍然是利用 Route 组件和路由嵌套的方式。下面是具体的步骤: 定义路由数组…
最新文章