在上一篇文章:.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文档,所以还是老规矩,我自己制作了一个,没有翻译相关内容,但看了文章也很容易理解。

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

.NET平台开源项目速览(10)FluentValidation验证组件深入使用(二)的更多相关文章

  1. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...

  2. NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(转载)

    原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_FluentValidation_1.html 阅读目录 1.基本介绍 ...

  3. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  4. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  5. .NET平台开源项目速览(1)SharpConfig配置文件读写组件

    在.NET平台日常开发中,读取配置文件是一个很常见的需求.以前都是使用System.Configuration.ConfigurationSettings来操作,这个说实话,搞起来比较费劲.不知道大家 ...

  6. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  7. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  8. .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践

    心情小札:近期换了工作,苦逼于22:00后下班,房间一篇狼藉~ 小翠鄙视到:"你就适合生活在垃圾堆中!!!" 晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14 ...

  9. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

随机推荐

  1. 浅谈ajax

    Ajax 回顾 最本质的 ajax 其实是这样的: function Ajax(){ var xmlHttpReq = null; if (window.ActiveXObject){//IE5 IE ...

  2. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

  3. 网络问卷调查js实现代码

    昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...

  4. 配置Spark on YARN集群内存

    参考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 运行文件有几个G大,默 ...

  5. spark 你要喧宾夺主么?好好干。

    嗯嗯,hadoop EcoSystem.

  6. ZK 使用jfreeChart

    前台: <?page title="Grid使用" contentType="text/html;charset=UTF-8"?> <zk x ...

  7. [原创]MySQL innodb_rollback_on_timeout参数对锁的影响

    环境:Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: innodb_rollback_on_timeout是 ...

  8. DBImport v3.5 中文版发布:数据库定时同步及文档生成工具(IT人员必备)

    前言: 趁着最近的休息时间,只能多勤快些:多写代码,多更新文章. 因为一旦投入新的工作,估计博客又会恢复到一年才产几篇的状态. 对于DBImport,因为用户的意见,增加了一个亮点功能,让软件B格升为 ...

  9. 【腾讯Bugly干货分享】打造“微信小程序”组件化开发框架

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2nQzsuqq7Avgs8wsRizUhw 作者:Gc ...

  10. node基本理念(事件、多线程、进程)

    关于node的几点理解: 1.所谓的node单线程,是指node的event loop,也就是我们的业务脚本是跑在一个单线程中的,可以理解为主线程: 2.若存在IO操作,例如文件.网络,是单独在线程里 ...