首页 > 其他分享 >.NET 8 的新增功能-数据验证

.NET 8 的新增功能-数据验证

时间:2024-01-26 13:44:26浏览次数:24  
标签:验证 ErrorMessage 新增 System DataAnnotations using NET public

1.概要

在.NET8中C#的新增特性,System.ComponentModel.DataAnnotations 命名空间包括用于云原生服务中的验证场景的新数据验证特性。 虽然预先存在的 DataAnnotations 验证程序适用于典型的 UI 数据输入验证(例如窗体上的字段),但新特性旨在验证非用户输入数据,例如配置选项。 除了新特性之外,还向 RangeAttribute 和 RequiredAttribute 类型添加了新属性。

新的 API说明
RangeAttribute.MinimumIsExclusive RangeAttribute.MaximumIsExclusive 指定边界是否包含在允许的范围内。
System.ComponentModel.DataAnnotations.LengthAttribute 指定字符串或集合的下界和上界。 例如,[Length(10, 20)] 要求集合中至少有 10 个元素,最多有 20 个元素。
System.ComponentModel.DataAnnotations.Base64StringAttribute 验证字符串是有效的 Base64 表示形式。
System.ComponentModel.DataAnnotations.AllowedValuesAttribute System.ComponentModel.DataAnnotations.DeniedValuesAttribute 分别指定允许列表和拒绝列表。 例如,[AllowedValues("apple", "banana", "mango")]。

 

 

2、测试

新建一个webapi项目 ,新建一个model  EmployeeModel.cs

using System.ComponentModel.DataAnnotations;

namespace WebApplication2.Model
{
    public class EmployeeModel
    {
        /// <summary>
        /// 员工id,Attribute含义:限制id的范围0~int最大值如果不在这个范围内则抛出异常
        /// </summary>
        [Range(0, int.MaxValue)]
        public int Id { get; set; }

        /// <summary>
        /// 员工名称,Attribute含义:限制Name不可以为president(总统),否则抛出ErrorMessage的内容。
        /// </summary>
        [DeniedValues("president")]
        public string Name { get; set; }

        /// <summary>
        /// 年龄 Attribute含义:限制Age的范围0~150岁最大值如果不在这个范围内则抛出异常
        /// </summary>
        [Range(0, 150)]
        public int Age { get; set; }

        //Required Attribute含义:Email字段不能为空(或验证失败),如果为空则抛出ErrorMessage的内容。
        [Required(AllowEmptyStrings = false, ErrorMessage = "邮件字段内容异常请检查!")]
        public string Email { get; set; }

        /// <summary>
        /// 部门,Attribute含义:假设现在只有两个部门,设置值的时候只允许这两个值的出现。否则抛出ErrorMessage的内容。
        /// </summary>
        [AllowedValues("HR", "Develop")]
        public string Department { get; set; }

        /// <summary>
        /// 下属id,Attribute含义:每个员工都有可能有下属,下属最少是1人最多是100人。否则抛出ErrorMessage的内容。
        /// </summary>
        [Length(1, 2)]
        public int[] Underlings { get; set; }

        //Attribute含义:token必须以base64的形式表达。否则抛出ErrorMessage的内容。
        [Base64String]
        public string Token { get; set; }
    }
}

 

3、验证

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using System.Xml.Linq;
using WebApplication2.Model;
using static System.Net.Mime.MediaTypeNames;

namespace WebApplication2.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class HomeController : ControllerBase
    {
        [HttpGet]
        public EmployeeModel Index()
        {
            EmployeeModel employeeModel = new EmployeeModel()
            {
                Id = -1,
                Name = "president",
                Age = -2,
                Email = "",
                Department = "",
                Underlings = new int[4] { 1, 2, 3, 4 },
                Token = "123"
            };

            if(ChangedAction(employeeModel))
            {
               
            }


            return employeeModel;


        }

        /// <summary>
        /// 验证
        /// </summary>
        /// <param name="employeeModel"></param>
        /// <returns></returns>
        private bool ChangedAction(EmployeeModel employeeModel)
        {
            ValidationContext context = new ValidationContext(employeeModel, null, null);

            List<ValidationResult> validationResults = new List<ValidationResult>();

            bool valid = Validator.TryValidateObject(employeeModel, context, validationResults, true);

            if (!valid)
            {
                foreach (ValidationResult validationResult in validationResults)
                {
                    Debug.WriteLine(validationResult.ErrorMessage);
                    //MessageBox.Show(validationResult.ErrorMessage);
                }
                return false;
            }
            return true;
        }
    }
}

 

标签:验证,ErrorMessage,新增,System,DataAnnotations,using,NET,public
From: https://www.cnblogs.com/handsomeziff/p/17989148

相关文章

  • 使用Visual Studio调试 .NET源代码
    前言在我们日常开发过程中常常会使用到很多其他封装好的第三方类库(NuGet依赖项)或者是.NET框架中自带的库。如果可以设置断点并在NuGet依赖项或框架本身上使用调试器的所有功能,那么我们的源码调试体验和生产效率会得到大大的提升。今天我们就一起来学习一下如何使用VisualStudio......
  • 如何使用 JWT 在 Next.js 中实现令牌身份验证
       原文------------https://www.makeuseof.com/token-authentication-nextjs-using-jwt/原文                   ......
  • 记一次 .NET某工控自动化系统 崩溃分析
    一:背景1.讲故事前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上给调试训练营的朋友分享GC标记阶段相关知识,而这个dump所展示的问题是对这块知识的一个......
  • .Net Core中JWT登陆系统
    1.加载JWT库2.配置类 3. 4.5.构造函数注入JWTsetting  5.写登陆方法  6.写一个需要登陆校验的方法 7.开始测试! 先登陆,获取jwt令牌将JWT令牌复制到Swagger的Authorize中(注意:jwt令牌复制之前需要在文本框中加上"Bearer") 测试Action1接口 ......
  • 阿里云效替代jenkins部署netcore程序
    问题描述:随着jenkins的不断升级,占用内存是越来越夸张,还需要宿主机上安装java11,最新版java11也不好使了,云服务器内存吃紧就寻思的换个思路走CI/CD,尝试使用阿里云效,折腾了半天感觉效果还行。编译打包方式与jenkins略有不同,之前是将代码拉到服务器jenkins目录,通过Dockerfile执行编译......
  • kubernetes 导出干净的 yaml内容
    从Kubernetes集群导出对象的完整清单很容易,但它会包含无关的会计字段,这不仅难以直观地评估和与其原始形式进行比较,而且还可能导致重新申请失败。结合使用jq和yq实用程序,我们可以使用以下语法导出干净的yaml清单。 安装yq jq sudoadd-apt-repositoryppa:rmescando......
  • .net 高并发(二,多线程)
    一,多线程可以通过System.Threading.Thread类来实现。下面是一个简单的示例,展示如何使用Thread类创建和管理多个线程: usingSystem; usingSystem.Threading;   classProgram { staticvoidMain() { //创建两个线程 Thre......
  • .net 高并发(一,异步编程模型)
    在.NET中,异步编程模型(Async/Await)是一种处理高并发的好方法。它允许开发人员以非阻塞的方式编写异步代码,从而使应用程序能够同时处理多个请求或任务,从而提高并发性能。下面是使用Async/Await进行异步编程的一般步骤:定义一个返回Task或Task<TResult>的方法,并在方法签名中使用as......
  • github action 自动化部署asp.net core应用到服务器
    在自己的仓库里工作流编辑workflow贴上自己的工作流name:ASP.NETCoreDeploymenton:push:branches:-master#你可以根据需要更改分支名称(在向master分支推送的时候触发这个workflow)jobs:deploy:runs-on:ubuntu-latest#使用Ubuntu环......
  • java报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorEx
    解决办法:1、用浏览器登录该https网站,在浏览器地址栏里找到“证书信息”->“详细信息”->“复制到文件”->选择DER编码二进制X.509(.CER)(D)导出证书,如证书名为pro1.cer;2、在jdk的jre/bin包里执行keytool-import-aliaspro1-keystore/usr/java/jdk1.8.0/jre/lib/security/c......