日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Util应用框架基础(四) - 验证

發布時間:2023/11/7 C# 48 coder
生活随笔 收集整理的這篇文章主要介紹了 Util应用框架基础(四) - 验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節介紹Util應用框架如何進行驗證.

概述

驗證是業務健壯性的基礎.

.Net 提供了一套稱為 DataAnnotations 數據注解的方法,可以對屬性進行一些基本驗證,比如必填項驗證,長度驗證等.

Util應用框架使用標準的數據注解作為基礎驗證,并對自定義驗證進行擴展.

基礎用法

引用Nuget包

Nuget包名: Util.Validation.

通常不需要手工引用它.

數據注解

數據注解是一種.Net 特性 Attribute,可以在屬性上應用它們.

常用數據注解

下面列出一些常用數據注解,如果還不能滿足需求,可以創建自定義的數據注解.

  • RequiredAttribute 必填項驗證

    [Required] 驗證屬性不能是空值.

    范例:

      public class Test {
          [Required]
          public string Name { get; set; }
      }
    

    [Required] 支持一些參數,可以設置驗證失敗的提示消息.

      public class Test {
          [Required(ErrorMessage = "名稱不能為空")]
          public string Name { get; set; }
      }
    
  • StringLengthAttribute 字符串長度驗證

    [StringLength] 可以對字符串長度進行驗證.

    下面的例子驗證 Name 屬性的字符串最大長度為 5.

      public class Test {
          [StringLength(5)]
          public string Name { get; set; }
      }
    

    還可以同時設置最小長度.

    下面驗證 Name 屬性字符串最小長度為1,最大長度為 5.

      public class Test {
          [StringLength(5,MinimumLength = 1)]
          public string Name { get; set; }
      }
    
  • MaxLengthAttribute 字符串最大長度驗證

    [MaxLength] 也可以用來驗證字符串最大長度.

    驗證 Name 屬性的字符串最大長度為 5.

      public class Test {
          [MaxLength(5)]
          public string Name { get; set; }
      }
    
  • MinLengthAttribute 字符串最小長度驗證

    [MinLength] 也可以用來驗證字符串最小長度.

    驗證 Name 屬性的字符串最小長度為 1.

      public class Test {
          [MinLength(1)]
          public string Name { get; set; }
      }
    
  • RangeAttribute 數值范圍驗證

    [Range] 用于驗證數值范圍.

    下面驗證 Money 屬性的值必須在 1 到 5 之間的范圍.

      public class Test {
          [Range( 1, 5 )]
          public int Money { get; set; }
      }
    
  • EmailAddressAttribute 電子郵件驗證

    [EmailAddress] 用于驗證電子郵件的格式.

      public class Test {
          [EmailAddress]
          public int Email { get; set; }
      }
    
  • PhoneAttribute 手機號驗證

    [Phone] 用于驗證手機號的格式.

      public class Test {
          [Phone]
          public int Tel { get; set; }
      }
    
  • IdCardAttribute 身份證驗證

    [IdCard] 用于驗證身份證的格式.

    它是一個Util應用框架自定義的數據注解.

      public class Test {
          [IdCard]
          public int IdCard { get; set; }
      }
    
  • UrlAttribute Url驗證

    [Url] 用于驗證網址格式.

      public class Test {
          [Url]
          public int Url { get; set; }
      }
    
  • RegularExpressionAttribute 正則表達式驗證

    [RegularExpression] 可以使用正則表達式進行驗證.

    由于正則表達式比較復雜,對于經常使用的場景,應封裝成自定義數據注解.

    下面使用正則表達式驗證身份證,可以封裝到 [IdCard] 數據注解,從而避免正則表達式的復雜性.

      public class Test {
          [RegularExpression( @"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)" )]
          public string IdCard { get; set; }
      }
    

驗證數據注解

雖然在對象屬性上添加了數據注解,但它們并不會自動觸發驗證.

你可以使用 Asp.Net Core 提供的方法驗證對象上的數據注解.

Util 提供了一個輔助方法 Util.Validation.DataAnnotationValidation.Validate 用來驗證數據注解.

DataAnnotationValidation.Validate 方法接收一個對象參數,只需將要驗證的對象實例傳入即可.

返回類型為驗證結果集合,包含所有驗證失敗的消息.

    public class Test {
        [Required]
        public string Name { get; set; }

        public ValidationResultCollection Validate() {
            return DataAnnotationValidation.Validate( this );
        }
    }

大部分情況下,你并不需要調用 DataAnnotationValidation.Validate 方法驗證數據注解.

實體,值對象,DTO等對象已經內置了 Validate 方法,它們會自動驗證數據注解.

Util Angular UI 數據注解驗證支持

Util Angular UI支持 Razor TagHelper服務端標簽語法.

可以在表單組件使用 Lambda表達式綁定 DTO 對象屬性.

TestDto參數對象 Name 屬性使用 [Required] 設置必填項驗證.

    public class TestDto : DtoBase {
        [Required]
        [Display(Name = "name")]
        public string Name { get; set; }
    }

Razor 頁面聲明 TestDto 模型, 定義輸入框 util-input,使用 for 屬性綁定到 TestDto 參數對象的 Name 屬性.

@page
@model TestDto

<util-form>
    <util-input id="input_Name" for="Name" />
</util-form>

Razor頁面最終會生成html,表單標簽 nz-form-label 添加了 nzRequired 必填項屬性, 輸入框 input 添加了 required 必填項屬性.

<form nz-form>
    <nz-form-item>
        <nz-form-label [nzRequired]="true">name</nz-form-label>
        <nz-form-control [nzErrorTip]="vt_input_Name">
            <input #input_Name="" #v_input_Name="xValidationExtend" name="name" nz-input="" x-validation-extend="" [(ngModel)]="model.name" [required]="true" />
            <ng-template #vt_input_Name="">{{v_input_Name.getErrorMessage()}}</ng-template>
        </nz-form-control>
    </nz-form-item>
</form>

通過將DTO數據注解轉換成標簽的驗證屬性,可以讓 Web Api 和 UI 的驗證同步.

自定義驗證

數據注解可以解決一些常見的驗證場景.

但業務上可能需要編寫自定義代碼以更靈活的方式驗證.

Util應用框架定義了一個驗證接口 Util.Validation.IValidation.

IValidation 接口定義了 Validate 方法,執行該方法返回驗證結果集合.

/// <summary>
/// 驗證操作
/// </summary>
public interface IValidation {
    /// <summary>
    /// 驗證
    /// </summary>
    ValidationResultCollection Validate();
}

實體,值對象,DTO等對象類型實現了 IValidation 接口,意味著這些對象可以通過標準的 Validate 方法進行驗證.

var entity = new TestEntity();
entity.Validate();

不論對象內部多么復雜,要驗證它只需調用 Validate 方法即可.

驗證邏輯被完全封裝到對象內部.

DTO自定義驗證

DTO參數對象 Validate 方法默認僅驗證數據注解,如果有錯誤將拋出 Warning 異常.

Warning 異常代表業務錯誤,它的錯誤消息會返回給客戶端.

Validate 是一個虛方法,可以進行重寫.

    public class TestDto : DtoBase {
        [Required]
        public string Name { get; set; }

        public override ValidationResultCollection Validate() {
            base.Validate();
            if ( Name.Contains( "test" ) )
                throw new Warning( "名稱不能包含test" );
            return ValidationResultCollection.Success;
        }
    }

TestDto 重寫了 Validate 方法.

首先調用 base.Validate(); ,保證數據注解得到驗證.

如果數據注解驗證通過, 判斷 Name 屬性是否包含 test 字符串,如果包含則拋出 Warning 異常.

由于DTO參數僅用來傳遞數據,不應包含復雜的驗證邏輯,通過重寫 Validate 方法添加簡單自定義驗證邏輯應能滿足需求.

另外, DTO參數驗證失敗,可直接拋出 Warning 異常,讓全局異常處理器進行處理.

領域對象自定義驗證

領域對象包含實體和值對象等.

對于較復雜的業務場景,與DTO不同的是,領域對象可用于業務處理,而不是傳遞數據.

需要為領域對象提供更多的驗證支持.

領域對象有多種方式進行自定義驗證.

  • 重寫 Validate 方法

    領域對象最簡單的自定義驗證方式是重寫 Validate 方法,并提供額外的驗證邏輯.

        public class TestEntity : AggregateRoot<TestEntity> {
            public TestEntity() : this( Guid.Empty ) {
            }
            public TestEntity( Guid id ) : base( id ) {
            }
    
            [Required]
            public string Name { get; set; }
    
            public override ValidationResultCollection Validate() {
                base.Validate();
                if( Name.Contains( "test" ) )
                    throw new Warning( "名稱不能包含test" );
                return ValidationResultCollection.Success;
            }
        }
    

    不過重寫 Validate 驗證方式也存在一些問題.

    • Validate 方法逐漸變得臃腫,代碼穩定性在降低.

    • 代碼的清晰度很低,重要的驗證條件屬于業務規則,卻被一堆雜亂的 if else 判斷淹沒了.

  • 驗證規則

    驗證規則 Util.Validation.IValidationRule 代表一個驗證條件,接口定義如下.

      /// <summary>
      /// 驗證規則
      /// </summary>
      public interface IValidationRule {
          /// <summary>
          /// 驗證
          /// </summary>
          ValidationResult Validate();
      }
    

    可以為較復雜和重要的驗證條件創建驗證規則對象,把復雜的驗證邏輯封裝起來,并從領域對象中分離出來.

    • 創建驗證規則對象

      約定: 驗證規則對象需要取一個符合業務驗證規則的名稱, 并以 ValidationRule 結尾,文件放到 ValidationRules 目錄中.

      ValidationRule 結尾可能導致名稱過長.

      這里演示就隨便起一個 SampleValidationRule.

      驗證規則依賴一些對象才能進行驗證,如何才能獲取依賴?

      通過驗證規則對象的構造方法傳入需要的依賴對象.

      驗證規則不通過Ioc容器管理,在需要的地方通過 new 創建驗證規則實例.

      SampleValidationRule 示例構造方法只接收一個參數,但可以根據需要接收更多依賴項.

      實現驗證規則的 Validate 方法.

      如果驗證成功返回 ValidationResult.Success.

      如果驗證失敗返回驗證結果對象 ValidationResult, 并設置驗證失敗消息.

      public class SampleValidationRule : IValidationRule {
          private readonly TestEntity _entity;
      
          public SampleValidationRule( TestEntity entity ) {
              _entity = entity;
          }
      
          public ValidationResult Validate() {
              if( _entity.Name.Contains( "test" ) )
                  return new ValidationResult( "名稱不能包含test" );
              return ValidationResult.Success;
          }
      }
      
    • 將驗證規則添加到領域對象

      領域對象基類定義了 AddValidationRule 方法,用于添加驗證規則對象.

      從領域對象外部調用 AddValidationRule 傳入驗證規則.

          var entity = new TestEntity();
          entity.AddValidationRule( new SampleValidationRule( entity ) );
      

      可以通過工廠方法封裝驗證規則.

      public class TestEntity : AggregateRoot<TestEntity> {
          public TestEntity() : this( Guid.Empty ) {
          }
          public TestEntity( Guid id ) : base( id ) {
          }
      
          [Required]
          public string Name { get; set; }
      
          public static TestEntity Create() {
              var entity = new TestEntity();
              entity.AddValidationRule( new SampleValidationRule( entity ) );
              return entity;
          }
      }
      
      var entity = TestEntity.Create();
      entity.Validate();
      

      對于比較固定且只依賴領域對象本身的驗證規則,可以在構造方法添加.

      public class TestEntity : AggregateRoot<TestEntity> {
          public TestEntity() : this( Guid.Empty ) {
          }
      
          public TestEntity( Guid id ) : base( id ) {
              AddValidationRule( new SampleValidationRule( this ) );
          }
      
          [Required]
          public string Name { get; set; }
      }
      
    • 設置驗證處理器

      驗證規則僅返回驗證結果,驗證失敗如何處理由驗證處理器決定.

      /// <summary>
      /// 驗證處理器
      /// </summary>
      public interface IValidationHandler {
          /// <summary>
          /// 處理驗證錯誤
          /// </summary>
          /// <param name="results">驗證結果集合</param>
          void Handle( ValidationResultCollection results );
      }
      

      領域對象默認的驗證處理器在驗證失敗時拋出 Warning 異常.

      你可以設置自己的驗證處理器來替換默認的.

      下面定義的 NothingHandler 在驗證失敗時什么也不做.

      /// <summary>
      /// 驗證失敗,不做任何處理
      /// </summary>
      public class NothingHandler : IValidationHandler {
          /// <summary>
          /// 處理驗證錯誤
          /// </summary>
          /// <param name="results">驗證結果集合</param>
          public void Handle( ValidationResultCollection results ) {
          }
      }
      

      調用 SetValidationHandler 方法設置驗證處理器.

      var entity = new TestEntity();
      entity.AddValidationRule( new SampleValidationRule( entity ) );
      entity.SetValidationHandler( new NothingHandler() );
      

驗證攔截器

Util應用框架定義了幾個用于驗證的參數攔截器.

  • NotNullAttribute

    • 驗證是否為 null,如果為 null 拋出 ArgumentNullException 異常.

    • 使用范例:

      public interface ITestService : ISingletonDependency {
          void Test( [NotNull] string value );
      }
    
  • NotEmptyAttribute

    • 使用 string.IsNullOrWhiteSpace 驗證是否為空字符串,如果為空則拋出 ArgumentNullException 異常.

    • 使用范例:

      public interface ITestService : ISingletonDependency {
          void Test( [NotEmpty] string value );
      }
    
  • ValidAttribute

    • 如果對象實現了 IValidation 驗證接口,則自動調用對象的 Validate 方法進行驗證.

    • 使用范例:

      驗證單個對象.

      public interface ITestService : ISingletonDependency {
          void Test( [Valid] CustomerDto dto );
      }
    

    驗證對象集合.

      public interface ITestService : ISingletonDependency {
          void Test( [Valid] List<CustomerDto> dto );
      }
    

源碼解析

DataAnnotationValidation 數據注解驗證操作

可以調用 DataAnnotationValidationValidate 方法驗證數據注解.

/// <summary>
/// 數據注解驗證操作
/// </summary>
public static class DataAnnotationValidation {
    /// <summary>
    /// 驗證
    /// </summary>
    /// <param name="target">驗證目標</param>
    public static ValidationResultCollection Validate( object target ) {
        if( target == null )
            throw new ArgumentNullException( nameof( target ) );
        var result = new ValidationResultCollection();
        var validationResults = new List<ValidationResult>();
        var context = new ValidationContext( target, null, null );
        var isValid = Validator.TryValidateObject( target, context, validationResults, true );
        if ( !isValid )
            result.AddList( validationResults );
        return result;
    }
}

ValidationResultCollection 驗證結果集合

ValidationResultCollection 用于收集驗證結果消息.

/// <summary>
/// 驗證結果集合
/// </summary>
public class ValidationResultCollection : List<ValidationResult> {

    /// <summary>
    /// 初始化驗證結果集合
    /// </summary>
    public ValidationResultCollection() : this( "" ) {
    }

    /// <summary>
    /// 初始化驗證結果集合
    /// </summary>
    /// <param name="result">驗證結果</param>
    public ValidationResultCollection( string result ) {
        if( string.IsNullOrWhiteSpace( result ) )
            return;
        Add( new ValidationResult( result ) );
    }

    /// <summary>
    /// 成功驗證結果集合
    /// </summary>
    public static readonly ValidationResultCollection Success = new();

    /// <summary>
    /// 是否有效
    /// </summary>
    public bool IsValid => Count == 0;

    /// <summary>
    /// 添加驗證結果集合
    /// </summary>
    /// <param name="results">驗證結果集合</param>
    public void AddList( IEnumerable<ValidationResult> results ) {
        if( results == null )
            return;
        foreach( var result in results )
            Add( result );
    }

    /// <summary>
    /// 輸出驗證消息
    /// </summary>
    public override string ToString() {
        if( IsValid )
            return string.Empty;
        return this.First().ErrorMessage;
    }
}

ThrowHandler 驗證處理器

ThrowHandler 是默認的驗證處理器,在驗證失敗時拋出 Warning 異常.

/// <summary>
/// 驗證失敗,拋出異常
/// </summary>
public class ThrowHandler : IValidationHandler{
    /// <summary>
    /// 處理驗證錯誤
    /// </summary>
    /// <param name="results">驗證結果集合</param>
    public void Handle( ValidationResultCollection results ) {
        if ( results.IsValid )
            return;
        throw new Warning( results.First().ErrorMessage );
    }
}

ValidAttribute 驗證攔截器

ValidAttribute 是一個 Aop 參數攔截器,可以對實現了 IValidation 接口的單個對象或對象集合進行驗證.

/// <summary>
/// 驗證攔截器
/// </summary>
public class ValidAttribute : ParameterInterceptorBase {
    /// <summary>
    /// 執行
    /// </summary>
    public override async Task Invoke( ParameterAspectContext context, ParameterAspectDelegate next ) {
        Validate( context.Parameter );
        await next( context );
    }

    /// <summary>
    /// 驗證
    /// </summary>
    private void Validate( Parameter parameter ) {
        if ( Reflection.IsGenericCollection( parameter.RawType ) ) {
            ValidateCollection( parameter );
            return;
        }
        IValidation validation = parameter.Value as IValidation;
        validation?.Validate();
    }

    /// <summary>
    /// 驗證集合
    /// </summary>
    private void ValidateCollection( Parameter parameter ) {
        if ( !( parameter.Value is IEnumerable<IValidation> validations ) )
            return;
        foreach ( var validation in validations )
            validation.Validate();
    }
}

總結

以上是生活随笔為你收集整理的Util应用框架基础(四) - 验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

黄色中文字幕在线 | 高清av在线 | 中文字幕乱偷在线 | 午夜精品一区二区三区视频免费看 | 久久午夜网 | 日韩在线观看你懂得 | 日日夜夜操操操操 | 国产香蕉97碰碰久久人人 | 国产精品欧美一区二区三区不卡 | 狠狠色丁香婷婷综合最新地址 | 久久久国产毛片 | av免费在线看网站 | av7777777| 久草com | 黄色1级大片 | 久久久999精品视频 国产美女免费观看 | 欧美激情h | 国产精品久久久久影院 | 久久久久看片 | 亚洲精区二区三区四区麻豆 | 在线免费亚洲 | 在线免费观看一区二区三区 | 麻豆传媒在线视频 | 日韩欧美精品一区二区三区经典 | 色美女在线 | www..com黄色片 | 一级成人在线 | 亚洲综合导航 | 欧美在线视频精品 | 在线精品视频免费播放 | 久久久久免费观看 | 国产成人一二三 | 国产精品一区二区美女视频免费看 | 人人爽人人爽人人片av免 | 色综合久久综合中文综合网 | 456成人精品影院 | 黄色片亚洲 | 午夜精品久久久久久中宇69 | 婷婷色在线播放 | 人人玩人人添人人澡97 | 久久久国产精品一区二区中文 | 国内精品久久久久影院一蜜桃 | 99免费视频 | 在线免费观看黄色av | 9免费视频 | 国产成人一区二区三区久久精品 | 欧美精品久久久久久久久久白贞 | 中文字幕在线影院 | 久久综合偷偷噜噜噜色 | 欧美福利网站 | 免费看三级网站 | 国产无遮挡又黄又爽在线观看 | 亚洲成人国产精品 | 天天人人 | 黄色av网站在线观看免费 | 91超在线 | 日韩视频www | 五月在线视频 | 91av美女| 中国一级片在线 | 国产精品久久久久久av | 国产精品精品国产婷婷这里av | 色5月婷婷| 天天爱综合 | 2018亚洲男人天堂 | 日韩中文免费视频 | 在线视频 日韩 | 天天天天天天天操 | 天天干夜夜干 | 在线探花| 蜜臀久久99精品久久久酒店新书 | 色天天综合久久久久综合片 | 久久99热精品 | 久久综合综合久久综合 | 中文字幕二区在线观看 | 精品久久久精品 | 久精品视频免费观看2 | 激情av综合 | 国产v欧美 | 精品你懂的 | 日日综合网 | 视频在线日韩 | 国产高清日韩 | 国产精品一区二区三区四区在线观看 | 日韩黄色av网站 | 婷婷丁香在线观看 | 日韩午夜网站 | 成人av久久 | 欧美一区二区三区激情视频 | 麻豆影视网 | 六月天综合网 | 亚洲精品乱码久久久久久久久久 | 欧美极度另类性三渗透 | 成人播放器 | 欧美性春潮| 久久久国际精品 | 99在线视频精品 | 婷婷激情站 | 国产特级毛片aaaaaaa高清 | 久久精选视频 | 丁香六月激情 | 久久婷婷丁香 | 国产精品一区二区白浆 | 天天干国产 | 免费视频黄色 | 97人人视频 | 日韩啪啪小视频 | 成人av地址 | 综合五月 | 在线精品视频免费播放 | 成人午夜影院在线观看 | 欧美日韩不卡一区 | 亚洲人在线视频 | 欧美日韩a视频 | 国产精品美女免费看 | 成人永久视频 | 色五丁香 | 国产自产高清不卡 | 911av视频| 午夜成人免费电影 | 国产精品原创av片国产免费 | 久久婷婷国产色一区二区三区 | 国产亚洲精品免费 | 日韩有码网站 | 久久99国产精品自在自在app | 久久6精品 | www.久久精品视频 | 人人爽人人| 91av免费看 | 亚洲伦理一区二区 | 亚洲va在线va天堂 | 久久午夜精品影院一区 | 国产在线国产 | 免费aa大片 | 午夜私人影院久久久久 | 999精品在线 | 特级大胆西西4444www | 手机看片1042 | 97在线看 | 国产色网站| 18性欧美xxxⅹ性满足 | 久久国产区 | 国产免费叼嘿网站免费 | 中文字幕亚洲综合久久五月天色无吗'' | a级国产乱理伦片在线观看 亚洲3级 | 久久婷婷一区 | 狠狠干狠狠久久 | 国产精品精品久久久 | 中文字幕一区二区三区在线视频 | 成人免费一级片 | 亚洲成av人片在线观看www | 国产爽视频 | 国产亚洲欧美一区 | 国产精品视频内 | 黄色成人在线网站 | 日韩av不卡在线播放 | 狠狠色综合网站久久久久久久 | 日韩精品一区二区三区丰满 | 最新日韩在线观看 | 91精品国自产在线观看欧美 | www.福利| 亚州人成在线播放 | 麻豆传媒在线免费看 | 成人黄色中文字幕 | 久久国产精品一区二区 | 成人片在线播放 | 99在线热播精品免费 | 色视频网站在线观看一=区 a视频免费在线观看 | 久久久精品 | 国产精品毛片久久久久久久 | 天天曰天天曰 | 麻豆视频在线观看 | 免费黄色在线网站 | 中文字幕在线色 | av中文字幕网址 | 色瓜 | 亚洲精品国精品久久99热一 | 免费看的视频 | 久久久久国产一区二区 | 夜夜视频资源 | 日韩国产精品毛片 | 国产精品久久久久久久免费大片 | 五月婷婷毛片 | 中文字幕在线观看不卡 | 久久久久久久久久久久久影院 | 国产中文字幕大全 | 免费美女久久99 | 国产小视频你懂的 | 欧美色插 | 欧美a√大片 | 亚洲专区 国产精品 | 中文字幕久久久精品 | 亚洲理论片在线观看 | 久久久久亚洲精品男人的天堂 | 欧美精品亚洲精品日韩精品 | 99中文在线| 欧美日韩免费一区二区 | 天天干婷婷| 中文字幕精品一区二区三区电影 | 中文字幕在线乱 | 成人97视频| 黄色aa久久 | 欧美成人黄色片 | 久久精品日产第一区二区三区乱码 | 国产在线观看地址 | 超碰在线97观看 | 97视频在线观看视频免费视频 | 色多多视频在线观看 | 天天天操操操 | 免费在线观看av电影 | 国产精品视频区 | 五月天狠狠操 | 久草com | 亚洲最新av | 成年人电影免费在线观看 | 国产在线视频在线观看 | 黄色毛片大全 | 国产精品久久久久久久久久久久午夜 | 国偷自产视频一区二区久 | 国产午夜麻豆影院在线观看 | 狠狠干狠狠久久 | 国产精品美女久久久久久免费 | 久久这里只有精品首页 | 96久久欧美麻豆网站 | 在线观看视频你懂的 | av黄色在线 | 亚洲在线精品视频 | 午夜资源站 | 久久久久激情视频 | 久久欧美综合 | 久久经典国产 | 国产又粗又硬又长又爽的视频 | 女人高潮一级片 | 国产精品 亚洲精品 | 岛国精品一区二区 | 在线观看亚洲国产精品 | 国产手机视频在线播放 | 久久www免费人成看片高清 | 中文字幕亚洲不卡 | 成人午夜影院在线观看 | 国产精品 视频 | 亚洲四虎在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品二区视频 | 国产护士在线 | 久久久久久久国产精品影院 | 久久久99精品免费观看app | 国产视频精品在线 | 日韩在线观看av | 欧美韩日在线 | 免费观看日韩 | 久草免费看 | www.天天草 | 日本精品中文字幕在线观看 | 免费观看久久久 | 视频99爱| 日本中文字幕久久 | 青青草国产免费 | 亚洲国产一区二区精品专区 | 免费视频久久久 | 欧美久草在线 | 国产福利精品视频 | 色婷婷成人 | 国产精品乱码一区二三区 | 亚洲精品18p | 国产精品美女999 | 国产在线观看你懂的 | 中国美女一级看片 | 色a综合 | 欧美一级小视频 | 97碰碰精品嫩模在线播放 | 国产中文字幕在线观看 | 欧美日韩国产精品久久 | 国产精品一区二区在线观看 | 日韩久久精品一区二区三区下载 | 国外调教视频网站 | 欧美在线视频一区二区三区 | 色多多污污在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久久久婷婷 | 日韩精品亚洲专区在线观看 | 高清视频一区 | 婷婷www | 欧美韩国在线 | 91在线91| 手机成人在线电影 | 毛片播放网站 | 国产精品一区二区美女视频免费看 | 少妇按摩av | 色综合久久88色综合天天免费 | 黄色91免费观看 | 免费观看黄色12片一级视频 | 伊人网av | 日韩在线免费小视频 | 婷婷久久综合网 | 在线看国产一区 | 福利区在线观看 | 精品国产成人在线 | 国产女人免费看a级丨片 | 欧美最猛性xxxxx免费 | 国产精品久久久久久久毛片 | 91在线播放综合 | 91桃色在线观看视频 | 草久久影院 | 特黄一级毛片 | 免费国产在线观看 | 99激情网| 亚色视频在线观看 | 在线观看91av | 国产精品女人久久久久久 | 丁香花在线观看视频在线 | 久久永久免费视频 | 免费国产一区二区 | 美女黄频视频大全 | 五月婷婷电影网 | 波多野结衣在线播放视频 | 日韩亚洲在线 | av在线播放快速免费阴 | 国产在线播放一区二区三区 | 日韩av网站在线播放 | 欧美日韩三区二区 | 久久蜜臀av | 国产日本高清 | 91精品国产高清自在线观看 | 久久国产精品精品国产色婷婷 | 亚洲综合狠狠干 | 4438全国亚洲精品观看视频 | 久草视频视频在线播放 | 亚洲综合丁香 | 99久久精品无码一区二区毛片 | 国产精品高潮在线观看 | 欧洲高潮三级做爰 | 综合久久久久久 | 蜜臀91丨九色丨蝌蚪老版 | 日韩中文在线播放 | 五月开心六月婷婷 | 麻豆94tv免费版 | 狠狠激情中文字幕 | 日韩在线观 | 人人爽人人爽 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 国产亚洲精品成人av久久ww | 91久久精品日日躁夜夜躁国产 | www在线观看视频 | 国产精品久久久久免费观看 | 欧美成a人片在线观看久 | 色婷婷激情电影 | 久久精品99国产精品亚洲最刺激 | 狠狠狠干狠狠 | 国产高h视频 | 九九久久在线看 | 亚洲传媒在线 | 黄a在线观看 | 亚洲精品久久久蜜臀下载官网 | 在线观看91视频 | 免费高清无人区完整版 | 免费看片网址 | 久草久草在线 | 久久99精品久久久久久秒播蜜臀 | 国产精品视频地址 | 亚洲欧美婷婷六月色综合 | 日本中文在线播放 | 久久久综合九色合综国产精品 | 国产精品99免费看 | 婷婷六月色 | 色综合久久88色综合天天免费 | 色是在线视频 | 最新中文字幕在线资源 | 最近高清中文字幕 | 免费视频 三区 | 久久成年人视频 | 日韩在线观看视频中文字幕 | 婷婷色在线资源 | 精品久久福利 | 日本h在线播放 | 狠狠色丁香久久综合网 | 欧美另类高潮 | 国产一区二区不卡视频 | 日韩精品久久久久久 | 欧美成人69av | 国产福利在线不卡 | 国产精品igao视频网入口 | 99久久er热在这里只有精品66 | 国产免费专区 | 三级在线播放视频 | 在线一级片 | 99视频+国产日韩欧美 | 欧美一级小视频 | 天天操天天操天天操天天操天天操天天操 | 国产精品成人av在线 | 精品国产一区二区三区男人吃奶 | 久草av在线播放 | 9999毛片 | 黄色不卡av | 日韩精品无码一区二区三区 | 超碰成人免费电影 | 伊人久久在线观看 | 91久久偷偷做嫩草影院 | 国产不卡一 | 992tv人人网tv亚洲精品 | 人人舔人人干 | 91久久精 | av日韩不卡 | 最新国产在线 | 日韩av中文字幕在线 | 国产区高清在线 | 黄色av影视 | 91 中文字幕 | 亚洲va天堂va欧美ⅴa在线 | 色99久久 | 午夜久草| 婷婷综合视频 | 特级西西444www大胆高清无视频 | 日韩欧美黄色网址 | 六月激情婷婷 | 中文av字幕在线观看 | 日韩在线中文字幕视频 | 亚洲激情在线 | 免费在线一区二区三区 | www.黄色| 亚洲干| 久久国语露脸国产精品电影 | a黄在线观看 | 日韩v在线| 亚洲综合在线五月 | 国产免费观看高清完整版 | 在线观看欧美成人 | 久久伊人五月天 | 国产美女精品视频 | 久久黄色精品视频 | 久久精品一区八戒影视 | 色橹橹欧美在线观看视频高清 | 密桃av在线 | 中文字幕乱视频 | 99人久久精品视频最新地址 | 日本黄色免费观看 | 亚洲国产伊人 | 人人草天天草 | 日本九九视频 | 日韩在线视频线视频免费网站 | 狠狠操电影网 | 最新中文字幕在线播放 | 在线观看亚洲国产精品 | 亚洲理论电影 | 亚洲在线观看av | 一区二区亚洲精品 | 一本一道波多野毛片中文在线 | 免费视频黄色 | 丰满少妇在线观看网站 | 99久久精品国产一区 | 狂野欧美激情性xxxx欧美 | 亚洲狠狠操 | 久久天天操| 国产午夜av| 97视频在线观看视频免费视频 | 波多野结衣在线观看一区二区三区 | 久久精品久久久久电影 | 色噜噜日韩精品一区二区三区视频 | 国产一级在线观看 | 欧美性视频网站 | 波多野结衣最新 | 999超碰| av成人黄色| 国内毛片毛片 | 99亚洲国产精品 | 韩日精品视频 | 国内精品久久久久久久影视简单 | 成人网在线免费视频 | 91九色蝌蚪视频 | 91精品免费 | 日韩中文字幕免费在线观看 | 在线观看免费黄视频 | 视频在线一区 | 日本天天操 | 日本女人的性生活视频 | 久草免费在线观看视频 | 欧美一级性 | 人人舔人人爱 | 欧美精品一区在线 | 国产资源中文字幕 | 欧美久久久久久久久中文字幕 | 亚洲午夜电影网 | 精品国产亚洲在线 | 日韩有码专区 | 精品国产一二三四区 | 久久爱综合 | 人人玩人人添人人澡超碰 | 一二三区视频在线 | 中文字幕麻豆 | 色婷婷视频网 | 日韩高清 一区 | 在线日韩亚洲 | 探花视频免费观看高清视频 | 免费久久视频 | 最新黄色av网址 | 国产美女在线精品免费观看 | 久久手机在线视频 | 黄色国产区 | 免费黄色一区 | 一级性视频 | 99爱国产精品 | 一区二区三区av在线 | 国产剧情av在线播放 | 久久久视屏 | 色婷婷亚洲精品 | 天天色婷婷 | 992tv成人免费看片 | 婷婷六月在线 | 99精品热视频只有精品10 | 久久国语| a√资源在线 | 亚洲精品国产视频 | 91免费观看视频在线 | sm免费xx网站 | 正在播放五月婷婷狠狠干 | 亚洲aⅴ乱码精品成人区 | 成人免费观看完整版电影 | 97国产人人 | 成人资源在线观看 | 日韩av电影网站在线观看 | 免费看成人a | 天天草综合 | 日韩系列| 欧美精品乱码99久久影院 | 久草爱| 69性欧美 | 欧美一级片在线观看视频 | 麻豆传媒视频在线 | 狠狠婷婷 | 成片免费观看视频 | 91精品老司机久久一区啪 | 久久午夜免费观看 | 亚洲综合色视频在线观看 | 中文区中文字幕免费看 | 日韩精品高清视频 | 欧美综合干 | 国产精品18久久久久久不卡孕妇 | 91精品导航| 狠狠干天天色 | 久久成人午夜视频 | 激情丁香5月 | 夜色在线资源 | 日韩一区二区三区在线看 | 中文字幕中文字幕在线中文字幕三区 | 亚洲精品456在线播放 | 久久久午夜视频 | 五月天婷婷免费视频 | 色综合天天色综合 | 在线观看国产日韩 | 伊人夜夜| 久久在线影院 | www.人人草 | 久久免费视频这里只有精品 | 亚洲精品理论 | 欧美一级免费在线 | 亚洲va韩国va欧美va精四季 | 欧美日韩成人 | 麻豆国产精品一区二区三区 | 99热.com| 婷婷中文字幕在线观看 | 久草电影免费在线观看 | 911香蕉视频| 婷婷网五月天 | 日本在线视频网址 | av网站大全免费 | 91黄视频在线 | 精品在线看| 日韩有码第一页 | 婷婷色在线 | 日韩免费在线视频观看 | 欧美精品二区 | 狠狠色丁香久久婷婷综合五月 | 日韩电影中文字幕 | 久久99精品视频 | 国产精品私拍 | 免费手机黄色网址 | 国产精品99蜜臀久久不卡二区 | 日本h在线播放 | 国产高清在线一区 | 日韩高清dvd | 久久免费国产视频 | 日韩一二三区不卡 | 91污视频在线 | 亚洲精品成人免费 | 亚洲精品乱码久久久久久9色 | 亚洲视频在线免费观看 | 国产在线观看国语版免费 | 国产精品字幕 | 亚洲国产精品成人va在线观看 | 久久久综合色 | 少妇高潮冒白浆 | 国产91精品高清一区二区三区 | 天天射天天操天天干 | 激情丁香综合 | 久九视频 | 精品日韩视频 | 国产免费三级在线观看 | 亚洲国产片色 | 四虎在线观看视频 | 久草视频免费在线观看 | 久久国产精品免费 | 超碰人人国产 | a黄色片 | 99久久久| 欧美日韩国产精品爽爽 | avcom在线| 美女视频黄是免费的 | www91在线观看 | 99r精品视频在线观看 | 在线播放av网址 | 在线观看久久 | 日韩网| 日韩电影中文字幕 | 日本精品久久久久 | 久久99在线视频 | 欧美另类高清 videos | 国产精品女同一区二区三区久久夜 | 久久精品国产一区二区电影 | 国产免费久久 | 欧美日韩在线观看一区二区 | 国内99视频| 97理论电影 | 免费观看第二部31集 | 久久婷婷色综合 | www.97色.com | 蜜臀av免费一区二区三区 | 97国产电影 | 欧美aaa视频 | 国产成在线观看免费视频 | 99热精品国产一区二区在线观看 | 色婷在线 | av在线播放国产 | 97国产超碰在线 | 97网在线观看 | 国产精品青青 | 欧美二区三区91 | 少妇bbw搡bbbb搡bbbb | 国产视频一级 | 超碰在线97免费 | 日本三级吹潮在线 | 一区二区激情视频 | 中文字幕一区二区三区在线视频 | av先锋影音少妇 | 午夜精品区 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 日韩在线视频不卡 | 日日干网址 | 婷婷六月天在线 | 狂野欧美激情性xxxx欧美 | 婷婷伊人五月天 | 精品久久久久一区二区国产 | 日日干夜夜操视频 | 美女视频黄在线 | 欧美一区二区免费在线观看 | av片中文| www.com久久 | 成年人黄色大全 | 狠狠干网址 | 免费视频成人 | 国产伦精品一区二区三区四区视频 | 911久久 | 天天综合人人 | 国产一二三四在线观看视频 | 日韩精品视频久久 | 亚洲欧洲国产日韩精品 | 999久久国精品免费观看网站 | 99re国产| 精品福利在线 | 欧美在线视频a | 国产精品美女久久久久久网站 | 免费性网站 | 国产精品久久片 | 91精品国产欧美一区二区成人 | 18pao国产成视频永久免费 | 麻豆91精品视频 | 最近中文字幕在线播放 | 蜜臀一区二区三区精品免费视频 | 在线免费国产视频 | 精品av在线播放 | 五月激情天 | 久久久精品欧美一区二区免费 | 午夜免费福利视频 | 美女视频又黄又免费 | 精品91在线 | 久在线观看视频 | 亚洲干视频在线观看 | 久久久久电影 | 六月色 | 国产在线一区二区 | 91av中文字幕 | 婷婷av色综合 | 日韩一区二区三区在线观看 | 午夜视频99 | 久久亚洲成人网 | 日本黄色片一区二区 | 色综合天天综合网国产成人网 | 成人在线视频免费 | 婷婷久久一区 | 超碰在线免费97 | av不卡网站 | 免费成人av | 久久精品伊人 | 久久免费电影网 | 日韩精品久久久久久久电影竹菊 | av中文字幕不卡 | 999国内精品永久免费视频 | 久久综合九色欧美综合狠狠 | 色综合久久五月 | 成人性生交大片免费观看网站 | 免费看一级一片 | 中文字幕一区二区三区在线视频 | av一区二区在线观看中文字幕 | 欧美男同网站 | 99热这里只有精品国产首页 | 日韩1级片 | 精品嫩模福利一区二区蜜臀 | 在线观看久 | 久久国产精品二国产精品中国洋人 | 国产精品久久在线 | 97视频网址| 最新av在线网址 | 成人一级片在线观看 | 又黄又爽的免费高潮视频 | 天天综合视频在线观看 | 欧洲精品视频一区 | 亚洲欧洲一级 | 伊人国产在线观看 | 欧美日韩视频在线播放 | 美女网站视频免费都是黄 | 日韩电影中文字幕在线观看 | 日本激情中文字幕 | 国产精品乱码一区二三区 | 成人全视频免费观看在线看 | 青青久草在线视频 | 免费黄色av | 啪一啪在线 | 国产精品视频永久免费播放 | 久久久久久97三级 | 一区二区欧美日韩 | 日韩精品久久一区二区 | 色婷婷亚洲婷婷 | 亚洲三级黄色 | 日韩视频一区二区在线观看 | 91亚洲成人 | 色国产精品 | 婷婷色中文网 | 91大神免费在线观看 | 日韩精品观看 | 色资源中文字幕 | 91大神视频网站 | 最近中文字幕第一页 | 日本中文字幕免费观看 | 天天想夜夜操 | 久久人人97超碰精品888 | 国产精品高清在线 | 2018好看的中文在线观看 | 欧洲视频一区 | 亚洲精品在线一区二区三区 | 久久久久久久久久国产精品 | 在线视频婷婷 | 国产成人免费观看 | 久久在视频 | 2022中文字幕在线观看 | 欧美爽爽爽 | 手机av看片| 久久成电影 | 久久热首页| 99tvdz@gmail.com| 国产精品久久久 | 国产破处精品 | 毛片视频电影 | 国产成人精品一区二区在线观看 | 日韩午夜在线播放 | 久久午夜鲁丝片 | 免费成人在线观看视频 | 日韩大陆欧美高清视频区 | 欧美日韩不卡一区二区 | 国产一区二区影院 | 99久久99视频 | 国产精品久久久久久久久久久久午夜 | 中文字幕视频在线播放 | 中文乱幕日产无线码1区 | 久久免费公开视频 | 久久99亚洲精品久久久久 | 亚洲精品久久久蜜桃直播 | 国产自产在线视频 | 国产精品av一区二区 | 国内外激情视频 | 亚a在线| 国产成人一区二区三区在线观看 | 亚洲国产精品小视频 | 狠狠色狠狠色终合网 | 日韩网页 | 91视频在线 | 中文字幕在线看视频国产 | 久久久在线免费观看 | 丁香五月亚洲综合在线 | 91色偷偷 | 草久久久久久久 | 国产精品一区二区三区四区在线观看 | 超级碰碰免费视频 | 日韩欧美在线第一页 | 亚洲日本在线一区 | 西西4444www大胆无视频 | 在线观看韩日电影免费 | 91麻豆高清视频 | 极品久久久久久久 | 欧美日韩精品免费观看视频 | 色 免费观看 | 国产99久久久国产精品免费看 | 日日躁你夜夜躁你av蜜 | 久久男女视频 | 日韩a级免费视频 | 黄色片免费电影 | 成 人 黄 色 片 在线播放 | 久久a热6 | 免费av视屏| 国产精品久一 | 日韩电影在线视频 | 成人午夜黄色影院 | 免费看黄色大全 | 国产96在线 | 91综合色| 成年人免费在线观看网站 | 亚洲日本欧美在线 | 国产99久久久精品 | 99 国产精品 | 久青草视频 | 久久精品人人做人人综合老师 | 中国一级片在线观看 | 欧美午夜剧场 | 亚洲高清视频一区二区三区 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 欧美日韩3p | 欧美 日韩 性 | 午夜少妇一区二区三区 | 99热官网 | 网址你懂的在线观看 | 青青草视频精品 | av免费看网站 | 免费网站看v片在线a | 久久精品波多野结衣 | 国产中文字幕网 | 丁香久久激情 | 久久av在线播放 | 在线韩国电影免费观影完整版 | 精品国产伦一区二区三区免费 | 欧美性生爱 | 久久婷婷一区二区三区 | 99婷婷狠狠成为人免费视频 | 黄色www免费 | 手机成人免费视频 | 中文字幕在线视频一区二区 | 69视频网站 | 黄色aa久久 | 亚洲自拍偷拍色图 | 久久久精华网 | 全黄网站 | 亚洲精品免费在线播放 | 日韩一二三 | 精品国产黄色片 | 99精品免费久久久久久久久日本 | 波多野结衣电影一区二区 | 日韩免费av在线 | 精品久久久久久综合日本 | 免费激情网 | 中文在线 | 日韩一区二区三区免费视频 | 在线播放 日韩专区 | 久久蜜臀av | 精品人人人 | 97人人模人人爽人人少妇 | 2018亚洲男人天堂 | 国产一区二区三区四区大秀 | 精品国产诱惑 | 中文字幕有码在线观看 | 日韩在线观看一区二区三区 | 人人爽人人爽人人片av | 日韩在线免费看 | 国产精品久久久久久久久久久久久久 | 久久免费视频网站 | 99精品视频网站 | 日本在线观看中文字幕无线观看 | 亚洲精品黄 | 国产中年夫妇高潮精品视频 | 日韩一级成人av | 狠狠操操网 | 伊人小视频 | 日韩欧美在线不卡 | 97超碰人人在线 | 狠狠色丁香婷婷综合 | 精品美女久久久久久免费 | 欧美午夜精品久久久久久孕妇 | 天天天色 | 狠狠色2019综合网 | 黄色网大全 | 国产99精品| 麻豆国产精品永久免费视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 996久久国产精品线观看 | 99精品国产视频 | 久久久精品网站 | 91视频亚洲 | 国产一级黄色片免费看 | 亚洲一区av| 香蕉影视 | 中文字幕超清在线免费 | 在线国产一区二区 | 久久伊人国产精品 | 日韩一区二区三区观看 | jizzjizzjizz亚洲 | 麻豆视频大全 | 国产精品久久久久久麻豆一区 | 欧美精品久久天天躁 | 激情五月婷婷综合网 | 亚洲国产精品va在线看黑人动漫 | 在线观看激情av | 久久婷婷综合激情 | 草久在线视频 | www久久九| 久久久久北条麻妃免费看 | 久久人人爽人人人人片 | 99久久综合国产精品二区 | 久久国产精品免费 | 日本久久中文字幕 | 欧洲成人av | 午夜精品久久久久久99热明星 | 国产精品久久久久久久久免费 | 五月激情六月丁香 | 亚洲乱码在线观看 | 精品一二三区视频 | 香蕉在线视频观看 | 久久久免费在线观看 | 免费男女羞羞的视频网站中文字幕 | 天天操天天操天天爽 | 麻豆国产精品一区二区三区 | 国产福利网站 | 黄网站app在线观看免费视频 | 美女视频黄网站 | 青草视频在线看 | 欧美日韩亚洲精品在线 | 四虎在线观看网址 | 欧美黑吊大战白妞欧美 | 黄色片视频在线观看 | 久青草影院 | 久久这里只精品 | 国产在线探花 | 国产网站在线免费观看 | 久久九九精品 | 黄色三级免费看 | 伊人热 | www.久久久.cum | 一级理论片在线观看 | 五月婷婷导航 | 麻豆成人精品视频 | 丁香六月综合网 | 丁香在线| 国产麻豆剧果冻传媒视频播放量 | 狠狠操综合| 日韩试看 | 国产精品久久久久久久妇 | av成人在线播放 | 欧美日韩中文在线观看 | 国产色视频一区二区三区qq号 | 天天操网 | 成人黄色av免费在线观看 | 欧美色噜噜噜 | 六月丁香伊人 | 黄网站免费大全入口 | 中文字幕网站视频在线 | 手机av资源| 97在线影视 | 在线观看视频在线观看 | 黄色aaa级片 | 91精品夜夜 | 久久综合福利 | 久草在线视频资源 | 国产精品av久久久久久无 | 日本特黄一级片 | 久久91网 | 四虎国产永久在线精品 | 日韩免费高清在线 | 国产精品久久亚洲 | 激情 亚洲| 国产成人黄色网址 | 精品国产日本 | 日日操天天操狠狠操 | 欧美热久久 | 天天干,狠狠干 | 手机看片99| 国产伦理一区二区三区 | a黄色大片 | 国产视频一区二区在线播放 | 久久色在线播放 | 日韩在线精品一区 | 国产伦理剧 | 亚洲综合五月天 | 国产精品久久久久久模特 |