zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    POJ 3660 Cow Contest (floyd求联通关系)
    POJ 3660 Cow Contest (最短路dijkstra)
    POJ 1860 Currency Exchange (bellman-ford判负环)
    POJ 3268 Silver Cow Party (最短路dijkstra)
    POJ 1679 The Unique MST (最小生成树)
    POJ 3026 Borg Maze (最小生成树)
    HDU 4891 The Great Pan (模拟)
    HDU 4950 Monster (水题)
    URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
    URAL 2037 Richness of binary words (回文子串,找规律)
  • 原文地址:https://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_FluentValidation_2.html
Copyright © 2011-2022 走看看