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

前言

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

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

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

Step By Step 步骤

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

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

    c# 复制代码
    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

    c# 复制代码
    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 内置数据校验功能适用于大多数简单的数据校验需求,能够提高开发效率和代码可维护性

相关推荐
小羊没烦恼!11 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
gudufy13 小时前
EasyAdminBlazor 生产部署完整指南:IIS、Windows 服务与宝塔
iis·asp.net core·在线升级·windows服务·easyadminblazor·blazor部署·宝塔部署
UIU11414 小时前
头文件可以防什么错?运用头文件做声明
c++·学习·c#
鑫 源20 小时前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
爱吃奥利奥_wen1 天前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
wflynn2 天前
GitHub 今日推荐|SCSKiller:游戏着色器预编译消除卡顿
开源·c#·github·nvidia·amd·directx12
疯狂的维修2 天前
关于用C#写电机起保停控制
开发语言·c#
用户788477316343 天前
门店核销闭环:小程序扫码 + .NET 幂等接口 + WPF 看板,一天能跑通
微信小程序·c#
samble3 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
miofly3 天前
GitHub 今日推荐|SCSKiller:游戏着色器预编译消除卡顿
开源·c#·github