.NET平台开源项目速览(10)FluentValidation验证组件深入使用(二)

简介:

    在上一篇文章:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 中,给大家初步介绍了一下FluentValidation验证组件的使用情况。文章从构建间的验证器开始,到最后的结果,以及复杂验证等都做了比较深入的讲解和使用。但其实一个完整的组件是麻雀虽小五脏俱全的,一篇文章还不能说明问题,对优秀的组件,我将分开尽量多一点的进行很完整的介绍。在查阅了官方提供的帮助文件中,还有一些组件内部以及个性化的东西,所以今天一起看看看这方面的内容。

    为了保持内容的完整性,大部分内容我都是参考FluentValidation提供的帮助文档,自己经过翻译和理解加工。更好的呈现给大家。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

本文原文地址:.NET平台开源项目速览(10)FluentValidation验证组件深入使用(二) 

1.FluentValidation内置验证器

    FluentValidation在使用的时候,我们也可以看到例子中,有一些验证方法,例如NotNull等,其实是其内部已经实现的几个常规的验证。所以先来看看他们的使用以及作用。FluentValidation本身附带了一个内置的验证器,每个验证器都可以输出固定格式的错误信息。这些内置的验证器是大家自定义验证器的基础。

1.1 空值验证:NotNull,NotEmpty

1.NotNull:确保属性的值不是Null,例如代码:

RuleFor(customer => customer.Surname).NotNull();

2.NotEmpty:确保属性值不是Null,不为空,或者空白字符串,相当于String的IsNullOrWhiteSpace方法

RuleFor(customer => customer.Surname).NotEmpty();

    上面应该是最简单也是最常用的吧,毕竟验证主要是空值相关的。内置验证器有错误信息的格式,例如NotEmpty的信息就是这个样子:

{PropertyName} = The name of the property being validated
{PropertyValue} = The current value of the property

1.2 相等验证:NotEqual,Equal

1.NotEqual:不相等验证,可以验证固定字符串,也可以验证和其他属性相对,比如验证密码和用户名不能相同:

RuleFor(customer => customer.Surname).NotEqual("Foo");
RuleFor(customer => customer.Surname).NotEqual(customer => customer.Forename);

2.Equal:去报指定的字段和其他固定信息或者属性的值是相等的,例如:

RuleFor(customer => customer.Surname).Equal("Foo");
RuleFor(customer => customer.Password).Equal(customer => customer.PasswordConfirmation);

1.3 大小比较验证:Length,Less Than,Greater Than等

1.Length:长度比较,主要是确定字符串的长度范围,相当于Range,例如:

//Surname的长度要在1-250个字符之间
RuleFor(customer => customer.Surname).Length(1, 250);

2.Less Than:主要是进行值比较,确定值<某个给定值或者属性,例如:

RuleFor(customer => customer.CreditLimit).LessThan(100);
RuleFor(customer => customer.CreditLimit).LessThan(customer => customer.MaxCreditLimit);

3.Less Than Or Equal:比较值小于或者等于某个值或者属性,例如:

RuleFor(customer => customer.CreditLimit).LessThanOrEqual(100);
RuleFor(customer => customer.CreditLimit).LessThanOrEqual(customer => customer.MaxCreditLimit);

4.Greater Than:比较值大于某个值或者属性,例如:

RuleFor(customer => customer.CreditLimit).GreaterThan(0);
RuleFor(customer => customer.CreditLimit).GreaterThan(customer => customer.MinimumCreditLimit);

5.Greater Than Or Equal:比较值大于或者等于某个值或者属性,例如:

RuleFor(customer => customer.CreditLimit).GreaterThanOrEqual(1);
RuleFor(customer => customer.CreditLimit).GreaterThanOrEqual(customer => customer.MinimumCreditLimit);

1.4 其他验证:正则验证,Email

     同时FluentValidation也支持Email验证以及正则表达式验证。正则表达式是比较强大的,直接支持应该可以给不少人提供方便,虽然我不太懂这玩意。但了解了解也是好的。看看例子:

RuleFor(customer => customer.Surname).Matches("some regex here"); 
RuleFor(customer => customer.Email).EmailAddress();

1.5 高级委托验证:Predicate

     这个单词不知道咋翻译,就是这个验证和其他的不一样,可以允许使用委托来进行验证。使用Must方法,也可以接受Lambda表达式,它的使用方法比较多,可以直接指定属性,或者指定类型,或者只给指定的值去验证都是可以的,例如下面这几种用法:

1.单独验证属性:

RuleFor(customer => customer.Identification).Must(BeUniqueId);
public bool BeUniqueId(Customer customer, CustomerId id) {  if (id == ...

2.单独验证类:

RuleFor(customer => customer).Must(HaveUniqueId);
public bool HaveUniqueId(Customer customer) { if (customer.Id == ...

3.Lambda表达式:

RuleFor(customer => customer.Id).Must(id => IsUniqueId(id));
public bool IsUniqueId(ID id) { if (id == ...

    这些内置的验证器就介绍到这里。总的来说,用了这些方法,构建自定义的验证器就更加方便快捷了。下面我们简单介绍一下错误信息的配置以及本地化的内容。

2.验证器错误信息配置

    在进行验证的时候,如果不重载错误信息方法,会提示类似默认验证器的一些验证错误信息,但也可以进行自定义。例如,下面2个例子:

RuleFor(customer => customer.Surname).NotNull()
                                     .WithMessage("Please ensure that you have entered your Surname");

     当然也可以搞更复杂的,格式化的信息,例如:

RuleFor(customer => customer.Surname)
  .NotNull()
  .WithMesasge("This message references some other properties: Forename: {0} Discount: {1}", 
    customer => customer.Forename, 
    customer => customer.Discount
  );

    当然还有一些简单的用法,大家可以参考官方文档:

    https://github.com/JeremySkinner/FluentValidation/wiki/d.-Configuring-a-Validator

3.其他内容

    其他内容,例如一些特殊的使用方法,限于篇幅和复杂,暂时不翻译了。这2篇文章已经足够全面的介绍该组件的功能了。其他内容可以参考下面页面:

https://github.com/JeremySkinner/FluentValidation/wiki/f.-Localization

https://github.com/JeremySkinner/FluentValidation/wiki/e.-Custom-Validators

4.帮助文档

    鉴于官方没有提供离线版的CHM文档,所以还是老规矩,我自己制作了一个,没有翻译相关内容,但看了文章也很容易理解。

blob.png

    下载地址:FluentValidationy验证帮助文档.rar

相关文章
|
28天前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
28天前
|
开发框架 前端开发 .NET
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
|
11天前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
35 0
|
2月前
|
存储 开发框架 前端开发
基于Lumisoft.NET组件,使用IMAP协议收取邮件
基于Lumisoft.NET组件,使用IMAP协议收取邮件
|
4月前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
|
2月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
2月前
|
开发框架 JSON .NET
|
3月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
113 0
|
3月前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
|
3月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。