首页
学习
活动
专区
圈层
工具
发布

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

1.概要 在.NET8中C#的新增特性,System.ComponentModel.DataAnnotations 命名空间包括用于云原生服务中的验证场景的新数据验证特性。...虽然预先存在的 DataAnnotations 验证程序适用于典型的 UI 数据输入验证(例如窗体上的字段),但新特性旨在验证非用户输入数据,例如配置选项。...System.ComponentModel.DataAnnotations.LengthAttribute 指定字符串或集合的下界和上界。...System.ComponentModel.DataAnnotations.Base64StringAttribute 验证字符串是有效的 Base64 表示形式。...这里我将使用WPF应用作为示例程序进行演示,项目目录结构如下采用的是传统的MVVM模式。接下来我们通过简单的代码示例来了解一下这些新特性的作用。

33810

使用Data Annotations进行手动数据验证

在非Asp.Net程序中(如控制台程序),我们也可以使用Data Annotations进行手动数据验证的,一个简单的例子如下(需要添加System.ComponentModel.DataAnnotations.dll...Annotations 虽然系统已经自带了常用的验证Attribute,但是,在实际应用中,我们仍然免不了要编写自己的验证规则,首先我们来看下其结构: ?...更多信息: 关于Data Annotations的更多知识这里就不做介绍了,感兴趣的朋友可以参看这篇文章:DataAnnotations Validation for Beginner WPF中的数据验证...: 实际上,数据验证往往并非用于前例所示的控制台程序程序,而是用于WPF这类GUI程序中。...WPF程序中也有一套非常完善的数据验证框架值得学习一下,限于篇幅这里就不多介绍了,感兴趣的朋友可以看看这篇文章:Data validation in WPF 改进: *支持自定义ErrorMessage

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?

    ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应的ValidationAttribute...但是在默认情况下,对于同一个类型的ValidationAttribute特性只允许一个应用到目标元素上——即使我们将AllowMultiple属性设置为True。这篇文章的目的就是为了解决这个问题。...具体的验证逻辑定义在重写的IsValid方法中。...在HttpPost的Index操作中,如果验证成功我们将“验证成功”字样作为ModelError添加到ModelState中。...幸好Attribute的TypeId属性是可以被重写的,县在我们在RangeIfAttribute中按照如下的方式对这个属性进行重写: 1: [AttributeUsage( AttributeTargets.Field

    2.7K60

    Asp.NetCore Web开发之输入验证

    在开发中,验证表单数据是很重要的一环,如果对用户输入的数据不加限制,那么当错误的数据提交到后台后,轻则破坏数据的有效性,重则会导致服务器瘫痪,这是很致命的。...所以进行数据有效性验证是必要的,我们一般通过js或者使用HTML标签自带的属性进行有效性限制,但在不断的演化中,也出现了一些很优秀的数据验证框架,使用它们能高效的开发,最常用的就是基于Jquery的jquery.validate.js...以上就是该框架的大体用法,但解释此用法不是本节的主要目的,我们了解了它的用法后,接下来介绍一个更简单的用法:asp.net core的输入验证,为了简化表单验证的代码量,asp.net core 从后端出发...,通过为属性标注特性的方式,在前台动态的生成jquery验证代码,具体用法如下: using System.ComponentModel.DataAnnotations;//输入验证的命名空间 public...,请点击Attribute特性了解它的用法),在Razor页面(同上,Asp.NetCore Web开发之RazorPage)使用如下形式定位要验证的input: @model PersonData /

    2.2K30

    ASP.NET MVC下的四种验证编程方式

    在针对GET请求的Action方法Index中,我们创建了一个Person对象并将其作为Model呈现在对应的View中。...“System.ComponentModel.DataAnnotations”命名空间定义了一系列具体的ValidationAttribute特性类型,它们大都可以直接应用在自定义数据类型的某个属性上对目标数据成员实施验证...这些自我验证类型是实现了具有如下定义的接口IValidatableObject,该接口定义在“System.ComponentModel.DataAnnotations”命名空间下。...validationContext); 4: } 如上面的代码片断所示,IValidatableObject接口具有唯一的方法Validate,针对自身的验证就实现在该方法中。...Age { get; set; } 11: 12: public IEnumerable Validate(ValidationContext validationContext

    1.6K80

    dotNET Core 3.X 使用 Web API

    最重要的是在 3.x 中使用的是 services.AddControllers(); 来注册服务,相比 2.x 中的 services.AddMvc() 更加轻量级,因为在 AddMvc 方法中添加了很多...输入参数 模型绑定 接口的输入参数就是通过模型绑定将 HTTP 请求中的值映射到参数中,模型绑定有以下六种: [FromRoute]:通过路由的 URL 中取值,可以自动推断; [FromQuery]:...有关更多的 Data Annotations 特性的使用,可以参考官方文档:https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations...validationContext) { var user = validationContext.ObjectInstance as User; if (user.Name...最后 本文只是涉及了在 Web API 中比较常用的一些功能点,限于篇幅,每个点并没有写的非常深入,也较少涉及原理,但我们在学习过程中,除了实现效果外还应该深入去了解其中细节和原理。

    1.7K30

    ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator

    具体在Model绑定过程中,ModelBinder通过ValueProvider为Model对象的某个属性提供相应属性值之后,会根据定义在基于该属性的Model元数据的验证规则实施验证。...public static readonly ValidationResult Success; 5: } 二、DataAnnotationsModelValidator 稍微了解...五、ValidatableObjectAdapter 在System.ComponentModel.DataAnnotations命名空间下定义了一个IValidatableObject接口,它代表另外一种验证的模式...如下面的代码片断所示,针对自身的验证实现在IValidatableObject的Validate方法中。...validationContext); 4: } ASP.NET Model验证系统定义了专门的ModelValidator来验证种实现了IValidatableObject接口的数据对象

    1.6K10

    EF Core 数据验证

    例如我们要验证 User 模型中的 Name 的长度,Name 长度不能大于 5 ,我们只需在 Name 属性上增加 StringLength 数据注解即可, StringLength 位于命名空间 System.ComponentModel.DataAnnotations...下面我们就通过数据注解中的验证器来验证刚才添加的特性。...最后我们通过 Validator 中的 TryValidateObject 方法验证实体数据并返回校验错误信息。...在业务代码中我们调用前面定义的 ExecuteValidation 方法进行验证,如果验证通过就调用 EF Core 的 SaveChange() 方法,如果未通过就调用相应的处理代码,代码片段如下:...这时一定有部分小伙伴想到了通过重写 SaveChanges 方法,将验证代码加入到这个方法中,这样就可以解决刚才的那个问题,达到一劳永逸的效果。

    1.3K20

    了解Spark中的RDD

    RDD设计背景 RDD被设计用来减少IO出现的,提供了一中抽象的数据结构,不用担心的底层数据的分布式特性。只需将具体的应用逻辑将一些列转换进行处理。不同的RDD之间的转换操作形成依实现管道话。...RDD提供的是一种高度受限的共享内存模型,既RDD是只读的记录分区的集合,不能直接修改,只能给予文档sing的物理存储中的数据来创建RDD,或者是从其他RDD操作上执行转换操作得到新的RDD。...RDD在操作中是属于惰性调用,只有到达‘’行动‘’这个操作之后,才会开始进行真正的计算。...但是由于RDD在设计中数据至刻度,不可更改,这就造成我们必须进行RDD的转换,将父RDD转换成子RDD。...Spark在运行过程中,是分析各个阶段的RDD形成DAG操作,在通过分析各个RDD之间的依赖关系来决定如何划分阶段。

    83850

    了解前端中的SPA

    ·路由:在URL中采用#号来作为当前视图的地址,改变#号后的参数,页面并不会重载。...单页Web应用(single page web application,SPA)是当今网站开发技术的弄潮儿,很多传统网站都在或者已经转型为单页Web应用,新的单页Web应用网站(包括移动平台上的)也如雨后春笋般涌现在人们的面前...单页web应用开发流程 用循环的视角审视Web应用开发 框定一个一致的SPA图形用户界面(GUI)和模型 将SPA的原则带回服务器端 聚集于对合适的应用进行早期SPA开发 SPA...SPA的主要目标是围绕着Web 2.0页面时间交互原则重构Web应用,以便体验可容易地转化到多个设备中,并对用户有效。...这会产生一种要对应用服务器进行重构的诱因,其目的是为了以1:1的比例来支持SPA。就最大程度上而言,该模型应该让自己的变量及命名空间本地化,并通过应用的服务器端与其他SPA交互。

    1.2K40

    了解Java中的内存泄漏

    在本教程中,我们将了解内存泄漏的潜在原因是什么,如何在运行时识别它们,以及如何在我们的应用程序中处理它们。 2....Java中内存泄漏类型 在任何应用程序中,数不清的原因可能导致内存泄漏。在本节中,我们将讨论最常见的问题。...这会占用内存并在我们的应用程序中造成重大内存泄漏。 JVM 1.6中这种情况的PermGen在VisualVM中看起来像这样: ?...请查看我们的 Java Profilers指南, 了解不同类型的分析器,如Mission Control,JProfiler,YourKit,Java VisualVM和Netbeans Profiler...使用java.lang.ref包,我们使用对象的特殊引用,而不是直接引用对象,这些对象可以很容易地进行垃圾回收。 引用队列旨在让我们了解垃圾收集器执行的操作。

    2.1K20

    带你真正了解 JavaScript 中的 this

    简单说,一个对象调用了它所"拥有"的方法,那么,这个方法中的 this 将指向这个对象(对象属性引用链中只有上一层或者说最后一层才在调用位置中起作用,例:a.b.c.func(),func 中的 this...,那么实际上对象中的属性持有的只是存在栈内存里函数的地址引用。...); } var obj = { a: 0 }; var o = { a: 2 }; var newFunc = func.bind(obj); newFunc.apply(o); //0 为了解决灵活性的问题...new 绑定 传统语言中,构造函数是类中的一些特殊方法,使用 new 初始化类时会调用类中的构造函数。而 js 中的所谓"构造函数"其实只是普通的函数,它们不属于某个类,也不会实例化一个类。...实际上 js 中并不存在构造函数,只有对于函数的构造调用。

    50940

    @Valid的作用(级联校验)以及常用约束注解的解释说明

    ,此处的校验只执行Person.Simple.class这个Group组上的约束~ 分组约束在Spring MVC中的使用场景还是相对比较多的,但是需要注意的是:javax.validation.Valid...就拿上例中的Demo校验Person类来说,最终得出的BeanConfiguration如下:(两个) 这是直观的结论,可以看到仅仅是一个简单的类其实所包含的项是挺多的。...的validateConstraints完成最终的校验逻辑,如果出现错误 //错误信息会被放到validationContext中,这里也就是executionContext中 boolean...MetaConstraint内部的constraintTree的validateConstraints方法中 ---- constraintTree的validateConstraints方法完成最终校验...@DurationMax和@DurationMin的message消息此处未贴出,有大量的EL计算,太长了~~~ ---- 参考 深入了解数据校验(Bean Validation):从深处去掌握@Valid

    4K30

    了解 Java 中的 AtomicInteger 类

    在多线程编程中,保证数据的原子性操作是非常重要的。Java 提供了一系列的原子类来支持这一需求,其中之一就是 AtomicInteger。...本文将介绍 AtomicInteger 类的基本概念、用法以及在多线程环境中的应用场景。 1. AtomicInteger 的简介 在多线程编程中,保证数据的原子性操作是至关重要的。...控制并发资源: 在一些并发编程模型中,可能需要限制同时访问某个资源的线程数量。...多个线程可以并发地向 AtomicInteger 中累加数据,而不需要额外的同步操作。比如多个线程统计某个数据源的数据量,最后将结果累加到同一个 AtomicInteger 对象中。...通过本文的介绍,希望读者能够对 AtomicInteger 类有一个更加深入的了解,并在实际的多线程编程中加以应用。

    18810

    快速了解kubernetes中的etcd

    在k8s中我们需要了解关于k8s的信息:集中存储:etcd 存储 Kubernetes 对象的所有配置、状态和元数据,例如 pod、secret、daemonsets、deployment、configmap...etcd 是 Kubernetes 控制平面中唯一的 StatefulSet 组件。...etcd中的Quorum和节点计数Quorum 是分布式系统中的一个概念,指的是群集正常运行必须能够运行并能够通信的最小节点数。...在 etcd 中,使用 quorum 来确保在节点故障时保持一致性和可用性。仲裁的计算公式为:quorum = (n / 2) + 1其中 n 是集群中的节点总数。...如何避免etcd中的脑裂场景在分布式系统中,当一组节点失去彼此之间的通信时,通常会发生裂脑情况,这通常是由于网络分区造成的。

    15010
    领券