国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Asp.Net Core遇到Swagger(四)-Swashbuckle技巧c篇

共 22463字,需瀏覽 45分鐘

 ·

2021-09-16 17:34

點(diǎn)擊上方藍(lán)色字體,關(guān)注我們


1


前言


Swashbuckle技巧b篇,與Action相關(guān)的配置和操作,此處為c篇內(nèi)容。



2


實(shí)踐技巧



2.1 忽略過時(shí)控制器和過時(shí)Action


1)配置服務(wù)


編輯ConfigureServices函數(shù)中的AddSwaggerGen函數(shù):

 services.AddSwaggerGen(c =>
 {
    ...
     #region 自定義DocInclusionPredicate判定規(guī)則
     //options.DocInclusionPredicate((docName, apiDesc) => {
     //   //判定當(dāng)前執(zhí)行是否為函數(shù)對(duì)象
     //   if (!apiDesc.TryGetMethodInfo(out MethodInfo methodInfo))
     //       return false;
     //   //獲取函數(shù)對(duì)應(yīng)的自定義特性ApiVersionAttribute對(duì)應(yīng)的版本集合
     //   var versions = methodInfo.GetCustomAttributes(true)
     //   .OfType<ApiVersionAttribute>()
     //   .SelectMany(x => x.Versions);
     //   //判定版本集合中是否與當(dāng)前文檔匹配
     //   return versions.Any(x => $"v{x}" == docName);
     //});
     #endregion
 
     #region 忽略過時(shí)特性
     //忽略標(biāo)記過時(shí)的Action
     options.IgnoreObsoleteActions();
     //忽略標(biāo)記過時(shí)的Properties
     options.IgnoreObsoleteProperties();
     #endregion
    ...
 };


2)添加案例控制器


新建控制器IgnoreObsoleteController,內(nèi)容如下:

 namespace swaggertestbase.Controllers.v1
 {
     /// <summary>
     /// 忽略函數(shù)控制器
     /// </summary>
    [Route("api/[controller]")]
    [ApiController]
     public class IgnoreObsoleteController : ControllerBase
    {
         /// <summary>
         /// 獲取忽略函數(shù)數(shù)據(jù)
         /// </summary>
         /// <returns>返回結(jié)果</returns>
        [Obsolete]
        [HttpGet]
         public string Get()
        {
             return "IgnoreObsolete";
        }
         
        [HttpGet("{id}")]
         //直接直接使用ApiExplorerSettings設(shè)置屬性IgnoreApi = true
         //在當(dāng)前項(xiàng)目中該配置無(wú)效
  [ApiExplorerSettings(IgnoreApi = true)]
  public string GetById(int id)
        {
             return "IgnoreObsolete";
        }
    }
 }


運(yùn)行效果如下,在v1組中并不存在對(duì)應(yīng)的控制器以及對(duì)應(yīng)過時(shí)的函數(shù)。


2.2 按照約定選擇Action函數(shù)


1)自定義約定實(shí)現(xiàn)類


新建類ApiExplorerGetsOnlyConvention,實(shí)現(xiàn)IActionModelConvention接口,進(jìn)行ActionModelConvention的自定義規(guī)則實(shí)現(xiàn)。

 /// <summary>
 /// 自定義實(shí)現(xiàn)只顯示Get請(qǐng)求的Action模型
 /// </summary>
 public class ApiExplorerGetsOnlyConvention : IActionModelConvention
 {
     public void Apply(ActionModel action)
    {
         //依據(jù)請(qǐng)求是否為get請(qǐng)求處理是是否參與apijson的數(shù)據(jù)接口生成
         action.ApiExplorer.IsVisible = action.Attributes.OfType<HttpGetAttribute>().Any();
    }
 }


2)添加約定到服務(wù)配置


 services.AddControllers(configure => {
     //添加自定義apiexplor.groupname控制器模型屬性
     //configure.Conventions.Add(new ApiExplorerGroupVersionConvention());
     //自定義實(shí)現(xiàn)只顯示Get請(qǐng)求的Action模型
     configure.Conventions.Add(new ApiExplorerGetsOnlyConvention());
 });


在控制器WeatherForecastController中添加一個(gè)Post請(qǐng)求函數(shù)。

 /// <summary>
 /// 獲取Post數(shù)據(jù)
 /// </summary>
 /// <returns>處理結(jié)果</returns>
 [HttpPost]
 public string Post()
 {
     return "處理結(jié)果";
 }


運(yùn)行效果:

2.3 自定義操作標(biāo)簽


默認(rèn)Tag分組是以控制器名稱為依據(jù)進(jìn)行劃分,也可以通過TagActionsBy函數(shù)進(jìn)行配置。


1)默認(rèn)分組



2)自定義Tags分組


修改ConfigureServicesAddSwaggerGen對(duì)應(yīng)配置,以下為依據(jù)Action的請(qǐng)求方法進(jìn)行分組的案例,需要注意的是IncludeXmlComments函數(shù),需要使用默認(rèn)配置,而不是設(shè)置IncludeXmlComments第二參數(shù)為true。

 services.AddSwaggerGen(options =>
 {
    ...
     #region 添加xml注釋文件描述性信息
     //獲取當(dāng)前執(zhí)行程序集名稱+.xml,作為實(shí)際xml注釋文件名稱
     string filename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
     //拼接路徑-路徑間隔符由系統(tǒng)決定
     string path = System.IO.Path.Combine(System.AppContext.BaseDirectory, filename);
     //添加xml注釋文件到swaggergen中用于生成api json
     //此時(shí)需要選擇使用該函數(shù)的默認(rèn)配置
     options.IncludeXmlComments(path);
     #endregion
 
     #region 自定義Tags
     options.TagActionsBy(apidescr => {
         return new string[] {
         apidescr.HttpMethod
        };
    });
     #endregion
    ...
 };
                       
 services.AddControllers(configure => {
     //添加自定義apiexplor.groupname控制器模型屬性
     //configure.Conventions.Add(new ApiExplorerGroupVersionConvention());
     //自定義實(shí)現(xiàn)只顯示Get請(qǐng)求的Action模型
     //configure.Conventions.Add(new ApiExplorerGetsOnlyConvention());
 });


運(yùn)行效果:


2.4 自定義Action排序操作


默認(rèn)情況下,Action能夠按Swagger規(guī)范,在添加到分組之前進(jìn)行排序操作,也可自定義排序規(guī)則,修改ConfigureServicesAddSwaggerGen對(duì)應(yīng)配置,此處以自定義排序規(guī)則Controller請(qǐng)求方法進(jìn)行排序。

 #region 自定義Tags
 options.TagActionsBy(apidescr => {
     return new string[] {
     apidescr.HttpMethod
    };
 });
 #endregion
 
 #region  自定義Tags排序
 options.OrderActionsBy(apidesc =>
 {
     //自定義Tag內(nèi)的Action排序
     return $"{apidesc.ActionDescriptor.RouteValues["controller"]}_{apidesc.HttpMethod}";
 });
 #endregion

運(yùn)行效果:


2.5 自定義架構(gòu)id


如果在文檔生成器遇到復(fù)雜的傳入?yún)?shù)或響應(yīng)類型,生成器會(huì)自動(dòng)生成相應(yīng)Json Schema,并將其添加到全局Components/Schemas字典中。

還是以天氣類WeatherForecast,默認(rèn)情況下,Api Json對(duì)應(yīng)請(qǐng)求鏈接http://localhost:5000/v1/swaggerapi.json內(nèi)容大致如下:

 {
   "paths": {
     "/WeatherForecast": {
       "get": {
         "tags": [
           "GET"
        ],
         "summary": "獲取天氣預(yù)報(bào)信息",
         "responses": {
           "201": {
             "description": "請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源",
             "content": {
               "text/plain": {
                 "schema": {
                   "type": "array",
                   "items": {
                     // #/components/schemas/{schemasid}
                     "$ref": "#/components/schemas/WeatherForecast"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
   "components": {
     "schemas": {
       "WeatherForecast": {
         "type": "object",
         "properties": {
           "date": {
             "type": "string",
             "description": "日期",
             "format": "date-time"
          }
        },
         "additionalProperties": false,
         "description": "天氣預(yù)報(bào)實(shí)體"
      }
    }
  }
 }


修改服務(wù)中ConfigureServices的配置,自定義標(biāo)識(shí)的生成規(guī)則CustomSchemaIds。

 public void ConfigureServices(IServiceCollection services)
 {
        services.AddSwaggerGen(
        options =>
            {
                 #region 自定義架構(gòu)Id
                 // 輸出對(duì)應(yīng)類型全名稱
    options.CustomSchemaIds(schema => schema.FullName);
    #endregion
            }
        );
 }


運(yùn)行后,對(duì)應(yīng)輸出的Json結(jié)構(gòu)如下:

 {
   "paths": {
     "/WeatherForecast": {
       "get": {
         "tags": [
           "GET"
        ],
         "summary": "獲取天氣預(yù)報(bào)信息",
         "responses": {
           "201": {
             "description": "請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源",
             "content": {
               "text/plain": {
                 "schema": {
                   "type": "array",
                   "items": {
                     // #/components/schemas/{schemasid}
                     "$ref": "#/components/schemas/swaggertestbase.WeatherForecast"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
   "components": {
     "schemas": {
       // {schemasid}
       "swaggertestbase.WeatherForecast": {
         "type": "object",
         "properties": {
           "date": {
             "type": "string",
             "description": "日期",
             "format": "date-time"
          }
        },
         "additionalProperties": false,
         "description": "天氣預(yù)報(bào)實(shí)體"
      }
    }
  }
 }


2.6 覆蓋特定類型架構(gòu)[不常用]


需要對(duì)特定類型進(jìn)行指定序列化處理時(shí),可以通過自定義架構(gòu)序列化類型處理。

數(shù)據(jù)實(shí)體類:

 /// <summary>
 /// 天氣預(yù)報(bào)實(shí)體
 /// </summary>
 public class WeatherForecast
 {
     /// <summary>
     /// 日期
     /// </summary>
     public DateTime Date { get; set; }
     /// <summary>
     /// 溫度-攝氏度
     /// </summary>
     public int TemperatureC { get; set; }
     /// <summary>
     /// 溫度-華攝氏度
     /// </summary>
     public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
     /// <summary>
     /// 描述
     /// </summary>
     public string Summary { get; set; }
 }


請(qǐng)求http://localhost:5000/v1/swaggerapi.json,原始Json架構(gòu)如下:

  "components": {
     "schemas": {
       "WeatherForecast": {
         "type": "object",
         "properties": {
           "date": {
             "type": "string",
             "description": "日期",
             "format": "date-time"
          },
           "temperatureC": {
             "type": "integer",
             "description": "溫度-攝氏度",
             "format": "int32"
          },
           "temperatureF": {
             "type": "integer",
             "description": "溫度-華攝氏度",
             "format": "int32",
             "readOnly": true
          },
           "summary": {
             "type": "string",
             "description": "描述",
             "nullable": true
          }
        },
         "additionalProperties": false,
         "description": "天氣預(yù)報(bào)實(shí)體"
      }
    }
  }


修改ConfigureServices中的AddSwaggerGen,設(shè)定類型序列化的架構(gòu)為字符串。

 services.AddSwaggerGen(
     options =>
    {
         #region 覆蓋特定類型架構(gòu)
         // 指定對(duì)應(yīng)的實(shí)體類型,類型架構(gòu)配置
         options.MapType<WeatherForecast>(() => new Microsoft.OpenApi.Models.OpenApiSchema { Type = "string" });
         #endregion
    }
    );


設(shè)置以后,對(duì)應(yīng)的類型在架構(gòu)中,無(wú)生成,目前無(wú)考慮深究原因,運(yùn)行效果如下:

2.7 使用過濾器擴(kuò)展生成器


1)操作過濾器


Swashbuckle會(huì)檢索每一個(gè)Asp.Net Core中的每一個(gè)ApiDescription,從中提取到對(duì)應(yīng)的OpenApiOperation,對(duì)應(yīng)OpenApiOperation類型和ApiDescription能夠通過操作過濾器列表實(shí)現(xiàn)傳遞。以包含權(quán)限認(rèn)證特性,響應(yīng)中401響應(yīng)狀態(tài)的操作過濾器為例。

創(chuàng)建類AuthResponsesOperationFilter實(shí)現(xiàn)IOperationFilter。

 public class AuthResponsesOperationFilter : IOperationFilter
 {
     public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
         var customAttributes = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
            .Union(context.MethodInfo.GetCustomAttributes(true))
            .OfType<AuthorizeAttribute>();
 
         if (customAttributes.Any())
        {
             operation.Responses.Add("401", new OpenApiResponse { Description = "UnAuthorized" });
        }
    }
 }


給控制器中WeatherForecastController對(duì)應(yīng)Post函數(shù)添加特性Authorize。

 /// <summary>
 /// 天氣預(yù)報(bào)服務(wù)
 /// </summary>
 [ApiController]
 [Route("[controller]")]
 public class WeatherForecastController : ControllerBase
 {
    ........
     /// <summary>
     /// 獲取Post數(shù)據(jù)
     /// </summary>
     /// <returns>處理結(jié)果</returns>
    [HttpPost]
    [Authorize]
     public string Post()
    {
         return "處理結(jié)果";
    }
    ........
 }


添加到動(dòng)作過濾器列表中,

 services.AddSwaggerGen(
     options =>
    {
  #region 添加權(quán)限認(rèn)證響應(yīng)操作過濾器
  options.OperationFilter<AuthResponsesOperationFilter>();
  #endregion
    }
 );


運(yùn)行效果如下:


需要注意的是,過濾器管道是DI感知的。可以使用構(gòu)造函數(shù)參數(shù)創(chuàng)建過濾器,只要參數(shù)類型已在DI框架中注冊(cè),則它們將在過濾器實(shí)例化時(shí)自動(dòng)注入。


2)架構(gòu)過濾器


Swashbuckle為控制器操作公開的每個(gè)參數(shù)、響應(yīng)和屬性類型生成 Swagger 樣式的 JSONSchema。生成后,它通過配置的架構(gòu)過濾器列表傳遞架構(gòu)和類型。

創(chuàng)建枚舉類型。

 /// <summary>
 /// 自定義枚舉
 /// </summary>
 public enum MyEnum
 {
     A,
     B,
     C
 }


創(chuàng)建SchemaFilterController控制器。

 [Route("api/[controller]")]
 [ApiController]
 public class SchemaFilterController : ControllerBase
 {
     /// <summary>
     /// 獲取SchemaFilter過濾器數(shù)據(jù)
     /// </summary>
     /// <param name="my">枚舉參數(shù)</param>
    [HttpGet]
     public void Get(MyEnum my)
    {
         
    }
 }


自定義類AutoRestSchemaFilter,實(shí)現(xiàn)ISchemaFilter。

 /// <summary>
 /// 自動(dòng)設(shè)置架構(gòu)過濾器
 /// </summary>
 public class AutoRestSchemaFilter : ISchemaFilter
 {
     public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
         var type = context.Type;
         if (type.IsEnum)
        {
             schema.Extensions.Add("x-ms-enum", new OpenApiObject()
            {
                ["name"] = new OpenApiString(type.Name),
                ["modelAsString"] = new OpenApiBoolean(true)
            });
        }
    }
 }


添加到架構(gòu)過濾器中:

 ....
     services.AddSwaggerGen(
                 options =>
    {
         #region 添加自定義架構(gòu)過濾器
  options.SchemaFilter<AutoRestSchemaFilter>();
  #endregion
    });
 ....


訪問http://localhost:5000/v1/swaggerapi.json,可以看到對(duì)應(yīng)結(jié)構(gòu)如下如下,x-ms-enum在對(duì)應(yīng)類型的架構(gòu)尾部。

 {
     "components": {
     "schemas": {
       "MyEnum": {
         "enum": [
           0,
           1,
           2
        ],
         "type": "integer",
         "description": "自定義枚舉",
         "format": "int32",
         "x-ms-enum": {
           "name": "MyEnum",
           "modelAsString": true
        }
      }
    }
  }
 }


通過上述例子,可以看出,對(duì)于枚舉等特殊類型,實(shí)際可以通過自定義Json schema的方式實(shí)現(xiàn)對(duì)應(yīng)字段值的備注含義。


3)文檔過濾器


Document Filters在遵守OpenApi的規(guī)范前提下,可以通過文檔過濾器對(duì)文檔進(jìn)行任意有效的Swagger Json。例如為當(dāng)前文檔添加額外的Tags,自定義過濾器TagDescriptionsDocumentFilter,實(shí)現(xiàn)IDocumentFilter。

 /// <summary>
 /// Tag描述文檔過濾器
 /// </summary>
 public class TagDescriptionsDocumentFilter : IDocumentFilter
 {
     public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
         swaggerDoc.Tags = new List<OpenApiTag> {
             new OpenApiTag{
                Name ="Pages",
                Description = "分頁(yè)類"
            },
             new OpenApiTag{
                Name ="Tests",
                Description = "測(cè)試類"
            }
        };
    }
 }


添加到現(xiàn)有的文檔過濾器中:

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddSwaggerGen(
         options =>
        {
             //忽略部分內(nèi)容
             #region 添加自定義文檔過濾器
             options.DocumentFilter<TagDescriptionsDocumentFilter>();
             #endregion
             //忽略部分內(nèi)容
        }
        );
 }


請(qǐng)求http://localhost:5000/v1/swaggerapi.json,在返回結(jié)果中能夠看到如下部分結(jié)構(gòu):

 {
     //忽略無(wú)關(guān)項(xiàng)
     "tags": [
    {
       "name": "Pages",
       "description": "分頁(yè)類"
    },
    {
       "name": "Tests",
       "description": "測(cè)試類"
    }
  ]
 }


后續(xù)文章將講解為Swagger添加安全驗(yàn)證。


往期推薦



點(diǎn)擊閱讀原文,更精彩~
瀏覽 77
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 91av免费在线观看| 国产色网站| 国产无码电影在线观看| 天天射天天干天天| 中文字幕韩日| 黄片av| 欧美另类激情| 日韩中文在线视频| 一本到无码| 免费黄片在线| 午夜亚洲AⅤ无码高潮片苍井空| 毛片黄色片| 国产十欧洲十美国+亚洲一二三区在线午夜 | 亚洲无码123| 日韩有码中文字幕在线观看| 久草视频在线免费看| 午夜精品在线观看| 四虎在线观看视频| 亚洲女与黑人正在播放| 色综合99| 自拍偷拍视频网址| 欧美午夜视频| 91久久精品视频| 人人草在线观看| 色呦呦视频在线观看| 先锋AV资源站| 色五月亚洲| 丁香五月AV| 日韩精品久久久| 国产精品久久久久久婷婷天堂| 先锋影音亚洲无码av| 国产黄色视频在线观看| 亚洲人妻AV| 67194熟女| 人人操人人骑| 婷婷综合一区| 你懂得视频| 国产AV无码影院| 欧美综合网在线观看| 制服.丝袜.亚洲.中文豆花| 国产www在线观看| 天天日天天添| 香蕉视频一区| 人妻精品无码| 欧美另类极品| 中文无码毛片| 免费无码成人| 中文字幕人妻精品一区| 国产一级在线观看| 毛片区| 久操视频在线免费观看| 亚洲免费观看高清完整版在线| 五月婷婷丁香网| 亚洲黄色在线观看视频| 亚洲免费观看高清完整| 美日韩A片| 字幕一区二区久久人妻网站| 九九无码| 久久综合九九| 欧美综合色| 中文字幕视频在线播放| 大香蕉超碰在线| 亚洲AV无码永久精品| 色婷视频| 三级av在线观看| 伊人色综合网| 高清无码一区二区在线| 无码人妻丰满熟妇区毛片蜜桃麻豆| 一级调教看片| 99成人| 毛片网站在线观看| 午夜激情在线观看| 无码人妻一区二区三区| av日韩无码| 中文在线字幕高清电视剧| 久久99久久99久久99| 狠狠干在线观看| 91久久电影| 性爱视频久久| 日韩免费成人视频| 人人干人人妻| 欧美一级免费A片| 操操操操| 2024男人天堂| 中国12一13毛片| 国产夫妻自拍av| 91精品国产乱码久久久| 婷婷五月18永久免费视频| 日韩AA视频| 亚色网址| 中国老太卖婬HD播放| 日韩AV在线免费观看| 亚洲无码高清在线观看| A无码| 色婷婷基地| 青草视频在线播放| 中文字幕第83页| 自拍偷拍在线视频| 久久久噜噜噜久久中文字幕色伊伊| 最近2021中文字幕免费| 91精品国产偷窥一区二区| 色老板最新网址| 国产女人18毛片水18精| 台湾一区二区| 色色大香蕉| 无码一区二区三区四区五区六区| 无码一区二区在线观看| 欧美精品第一页| 91精品久久久久久久久| 大地影院资源官网| 欧洲成人在线视频| 麻豆av在线观看| 日韩av免费看| 香蕉三级片| 日本综合久久| 中日韩在线视频| 国产午夜在线视频| 男人天堂社区| 操欧美老女人| 在线观看日本vs欧洲vs美洲| 亚洲欧美国产精品专区久久| 亚洲精品黄色| 黄色成人在线观看| 神马午夜福利| 天干天干天夜夜操| 日韩在线欧美在线| 国产免费激情视频| 5252a我爱haose01我愿| 特级西西| 国产精品无| 国产AV黄| 91精品丝袜久久久久久| 翔田千里无码播放| 国产成人精品av在线观看| 欧美三级网站在线观看| 色综合天天综合成人网| 18av在线观看| 中文字幕在线不卡| 色婷五月天| 国产性色| 大香蕉在线视频99| 欧美男女日逼视频| 久久婷婷婷| 麻豆911精一区二区| 欧美日韩中文视频| A片黄色视频| 午夜乱伦福利| 欧美性爱视频免费观看| 51国产黑料吃瓜在线入口| 中文字幕第69页| 91九色视频| 成人视频免费网站| 91视频一区| 国产欧美一区二区三区视频| 欧美亚洲三级片| 艹逼视频免费观看| 五月婷婷五月丁香| 在线亚洲一区| 中国免费XXXX18| 青娱乐av在线| 国产激情片| 欧美1区| 午夜精东影业果冻传媒| 久久夜色精品噜噜亚洲AV| 国产在线一二三| WWWA级片| AV无码网| 日本久热| 站街大龄熟女x| 操逼网站在线观看| 日韩美女视频19| 91啪啪| 久久99精品久久久久婷婷| 高潮视频在线| 波多野吉衣av| a片一级片| 色婷婷视频网站| 天天综合天天做天天综合| 国产精品成人AV片| 好吊视频一区二区三区| 大鸡巴影院| 亚洲天堂高清无码| 蜜桃视频日韩| 欧一美一色一伦一A片| www.日韩欧美| 婷婷五月天电影| 日本成人性爱视频网站一区| www.99免费视频| 久久影院av| 国产免费www| 无码专区在线观看| 免费网站观看www在线观看| 中文字幕无码在线视频| 亚洲天堂本一| 成人国产精品秘欧美高清| 精品国产乱码| 国产精品久久久久久无码人妻| 无码偷拍| 黄色小电影网站| 无码中文字幕| 一区二区三区小视频| 成人免费无遮挡无码黄漫视频| 永久免费一区二区三区| 中文字幕免费在线看一区七区| 精品中文一区二区三区| 亚洲天堂AV在线观看| 91久久精品无码一区| 日韩中文字幕人妻| 午夜成人福利电影| 中字无码AV| 免费国产乱伦| 操学生妹| 国产淫语| 成人视频网站在线观看| 9191久久| 91在线免费播放| 欧美午夜成人一区二区三区| 蜜桃秘av一区二区三区安全| 毛片网页| 午夜精品18视频国产| 成人精品一区二区三区无码视频| 日韩欧美V| 亚洲精品一区二三区不卡| 久艹| 国产伦精品一区二区三区色大师| 成人黄色电影在线| 欧美性受| 草逼com| 日韩精品成人AV| 九月丁香婷婷| 欧美精品一卡| 丁香久久| 国产久久精品视频| AV第一福利大全导航| 久久久久无码精品国产91福利| 日韩免费毛片| 国产操逼免费看| 亚洲三级黄片| 狼人香蕉网| www.狠狠| 88国产精品| 成人无码网站在线观看| 麻豆三级片在线观看| 91拍真实国产伦偷精品| 欧美屄视频| 国产精品小电影| 大茄子熟女AV导航| 高清无码18| 国产免费成人在线观看| 亚洲无码一区在线| A毛片| 玖玖视频| 欧美午夜电影| 综合色网站| 国产精品一级片| 乱子伦一区二区三区视频在线观看 | 七十路の高齡熟妇无码| 麻豆传媒嫂子| 国产SM视频| 久久污| 成人福利在线| 亚洲天堂视频网| 天堂网在线播放| 国产精品女| 精品91美女| 国产免费AV在线观看| 亚洲黄色视频免费看| 亚洲欧洲在线视频| 视频一区在线播放| 爆乳一区二区三区| 亚洲精品AⅤ一区二| 欧美熟妇性爱视频| 蜜臀久久99精品久久久久久婷婷| 国产色情视频| 亚洲国产另类精品| 亚洲天堂网在线观看视频| 97视频在线免费观看| 午夜黄电影| 人人澡人人摸| 欧美成人精品欧美一级私黄| 亚洲成人少妇老妇a视频在线 | 98色色| 特级西西444www高清大胆免费看| 免费在线观看无码视频| 日韩操b| 中国人妻HDbute熟睡| 97色色婷婷| 人人操人人摸人人| 伊人久久大香色综合久久| 91大神在线看| 大香蕉三级片| 中文字幕免费一区| 极品美鮑20p| 人人色人人爱| 日韩AV在线天堂| 国产夫妻自拍AV| 欧美一级片在线观看| 天天色天天色| 亚洲欧洲成人| 青草av在| 91精品国产成人做爰观看奶头| 亚洲AV毛片| 大香蕉伊人成人网| 波多野结衣高清视频| 狠狠操综合网| 亚洲天堂高清无码| 欧美插逼视频| 欧美色性乐汇操日本娘们| 少妇搡BBBB搡BBB搡毛片少妇| 国产黄色在线免费观看| 国产欧美一区二区三区国产幕精品 | 青青av| 一级内射片在线网站观看| 人成视频在线免费观看| 久久夜色视频网| 亚洲无码激情视频| 大香蕉69| 91porn国产| 久久这里只有精品99| 美国无码黄片| 爱爱爱爱视频| 色色色综合| xxx一区二区| 亚洲精品无码久久久| 美日韩综合| 东京热视频免费观看| 大香蕉伊人久久| 大地中文资源5页的更新内容| 成人黄片视频| 香蕉国产在线视频| 国产精品98| 日日夜夜爽歪歪| 骚网站在线观看| 日日av| 91在线观看网站| 91福利导航| 日本少妇激情视频| 欧美性小说| 大橡胶伊人网| 精品人妻午夜| 插菊花综合| 国产成人精品免费看视频| 日韩在线视频一区| 色五月电影| 91夫妻视频| 日本欧美成人片AAAA| 成人无码交配视频国产网站| 久久久亚洲AV无码精品色午夜| 国产精品秘久久久久久一两个一起| 99热这里都是精品| AV在线导航| 麻豆视频在线观看| 97爱爱网| 免费a视频| 一区免费在线观看| 欧美熟妇精品一级A片视色| 亚洲va欧美ⅴa在线| 制服乱伦| www插插| jizz视频| 亚洲理论在线| 日本内射在线观看| 久久久免费黄色视频| 99xav| 美女做爱在线观看| 91探花秘在线播放偷拍| 91麻豆免费看| 亚洲激情一区| 在线观看国产区| 亚洲欧美网站| 日韩三级在线免费观看| 亚洲av图片| 久久久精品电影91| 欧美中文字幕在线播放| 久久久久久国产免费A片| 美腿丝袜中文字幕精品| 青青操首页| 91久久亚洲| 日韩乱轮小说与视频| 各国熟女HD合集| 亚洲人在线观看| A视频免费观看| 国产亚洲色情| 一级片视频在线观看| 无码日逼视频| 欧美成人免费网站| 西西888WWW大胆视频| 久久国产成人| 熟女视频网| 国产一级特黄A片| www.久久精品视频| 18禁在线播放| 人妻无码久久精品| 亚洲天堂在线观看视频| 欧美激情视频一区二区| 国产吃奶| 中文字幕四区| 91视频熟女| 黄色激情视频网站| 欧一美一婬一伦一区?| 国产AV三级片| 苍井空无码在线观看| av无码在线观看| 亚洲另类自拍| 日韩美女免费性爱视频| 亚洲中文综合| 亚洲国产成人精品激情在线| 俺去听听婷婷| 国产精品视频在线播放| 成人黄色免费网站| 日本视频精品| 操你久久| 亚洲天堂在线观看免费| 人人妻人人玩澡人人爽| 国产精品A片守望| 草草影院第一页YYCCC| 亚洲天堂一区| 中文字幕精品在线视频| 久久丁香五月天| 制服乱伦| 在线免费观看黄色网址| 欧美天天| 欧美日韩不卡视频| 日韩免费在线观看一区入口| 各种妇女撒尿mm毛免费网站| 伊人大久久| 最近中文字幕免费| 粉嫩小泬BBBBBB免费看| 国产剧情一区二区av在线观看| 在线免费观看无码| 麻酥酥在线视频| 亚洲精品乱码| 国产精品久久免费| 婷婷色色五月天图片| 91探花视频在线观看| 热久久最新| 国产色视频| 亚洲性片| 苏妲己一级婬片A片| 日韩免费高清无码| 天天综合在线观看| 国产V精品| 亚洲天堂成人网| 一级黄色电影免费在线观看| 亚洲激情在线| 日逼欧美| 无码一区二区三区免费看| 亚洲无码免费观看视频| 色色综合视频| 国产成人高清在线| 在线视频一区二区三区| 亚洲精品久久久久毛片A级绿茶| 九九r在线精品观看视频| 久久精品一区二区三区蜜芽的特点 | 91污视频在线观看| 国产人妻一区二区三区欧美毛片 | 大香蕉一本| 国产视频中文字幕| 久久久久久久久久成人永久免费视频 | 中文字幕第27页| 亚洲成人无码在线| 精品国产三级片| 无码一区二区三区免费看| 黄色视频网站免费| 亚洲成人免费观看| 天堂视频中文在线| 嫩BBB槡BBBB槡BBB| 日皮在线观看| 91视频网站入口| 丁香六月婷婷综合| 亚洲精品A| 国产精品香蕉国产| 91香蕉| 无码精品电影| 久久大香蕉91| 久久婷视频| 男女视频网站| 婷婷色五月激情| 毛片2| 一道本久久| 天天爽天天爽成人A片影院| 久久思热国产| 国产又爽又黄免费网站免费观看| 免费在线观看黄视频| 国产黄在线| avcom无码| 国产淫语| 日韩一区二区三区精品| 久久xxx| 久热草| 激情婷婷丁香| 人操人人| 大鸡巴操骚逼视频| 91成人久久| 天堂v在线观看| 少妇福利| 日韩熟妇无码中文字慕| 欧美三级视频在线| 新亚洲天堂男子Av-| 麻豆国产一区二区三区四区| 日韩无码免费电影| AV资源网站在线| 亚洲无线观看| 国产AV在| 久久精品导航| 日本一级黄色电影网| 国产性爱在线| 色五月婷婷在线| 91精品丝袜久久久久久| 国产AV日韩| 天堂中文字幕在线观看| 久久精品夜色噜噜亚洲A∨| 亚洲免费小黄片| 黄色带亚州| 五月天丁香社区| 亚洲国产成人91PORN| 蜜芽成人精品久久久视频| 久久久国产精品人人片| 天天日天天色| 风流少妇一区二区三区91| 亚洲中文字幕有码| 国产一级免费在线观看| 亚洲午夜AV久久乱码| 一级全黄120分钟免费| 免费黄色片子| 人人肏人人射| 欧美成人18| 日本操逼网站| 亚洲无码在线视频观看| 人妻18无码人伦一区二区三区精品 | 欧一美一婬一伦一区二区三区自慰,| 曰韩一级片| 2025av中文字幕| 老熟女乱伦| 北条麻妃99精品| 亚洲成人无码视频在线观看| 五月丁香婷婷成人| 人操人人| av不卡在线| 免费在线观看黄色片| 丁香婷婷综合网| 黄色网址五月天| 大香蕉啪啪| 3D动漫啪啪精品一区二区中文字幕| 天天天天天天天天操| 欧美在线视频你懂的| 亚洲综合一二三区| 国产精品久久久久永久免费看| 日韩特级毛片| 国产成人自拍视频在线观看| 91大神在线免费观看| 色色色色色色网站| 中文亚洲字幕| 777免费视频| 自拍偷拍影音先锋| av亚洲波多野结衣白嫩水多波 | 国精产品秘成人一区二| 亚洲AV无码精品国产| 天天射日| 黄色A一级| 日韩一级在线| 免费观看av| 国产毛片网| 久久久精品欧美| 国产亚洲精品久久久波多野结衣 | 亚洲三级在线免费观看| 超碰二区| MAD033_后宫秘密陶子.| 亚洲激情网站| 北条麻妃无码精品AV| 国产69精品久久久久久| BBw日本熟妇BBwHD| 久久久久99| 性欧美成人播放77777| 亚洲激情小说| 2025国产精品| 91成人在线免费视频| 欧美在线无码| 啪啪免费网| 欧美日韩成人网| 精品欧美激情精品一区| 亚洲AV免费| 中文字幕人妻日韩在线| 亚洲最新中文字幕| 国产97在线观看| 亚洲激情自拍| 久久免费视频网站| 强开小嫩苞毛片一二三区| 粉嫩AV蜜乳AV蜜臀AV蜂腰AV | 操逼电影免费| 超碰在线免费| 欧美色图网站| 日本黄色一级视频| 亚洲无码一级片| 成年人黄色视频在线观看| 伊人五月天| 人人爱人人操人人干| 亚洲素人无码| 人妻少妇被猛烈进入中文字幕| 精品视频在线观看| 亚洲成人三区| 国产在线不卡| 天堂在线中文字幕| 欧美另类色| 影音先锋麻豆| 西西4444大胆无码视频| 伊人大香蕉网站| 日韩72页| 亚洲av无码精品| 日本精品久久| 黄片网址| 日韩AV免费在线观看| 99综合网| AV三级片在线观看| 天堂在线无码| 日韩精品综合| 精品无码一区二区三区的天堂| 成人91视频| 超碰一区二区三区| www.午夜福利| A级片免费看| 综合视频一区| 人人操人人摸人人射| 亚洲色逼图片| 在线观看av网站中文字幕| 免费黄色成人网站| 青青久草| 狠狠操在线| 黄网在线免费观看| 精品999| 大香蕉久久久久| 色噜噜AV| 9797色色| 大香蕉三级| 人人摸人人操人人干| 亚洲欲色| 免费成人视频在线观看| 国产成人自拍网| 黄色小说在线看| 午夜一本道| 夜夜躁狠狠躁| 色五月婷婷视频| 欧美日本一区二区三区| 日P免费视频| 欧美一级操| 四虎无码丰满人妻| 成人播放视频| 青娱乐三级在线免| 伊人网站| 免费黄色小视频| 久久V| 日韩一级黄色片| 欧美黄色电影在线观看| 国产福利视频在线| 国产一区二区三区四区视频| 51成人网站免费| 黄色www| 爱爱视频免费看| 青青草在线视频免费观看| 搡BBBB搡BBB搡我瞎了| 五月婷婷六月激情| 国产性爱在线观看| 国产毛片在线看| 五月天久久久| 婷婷综合色| 免费看一级一级人妻片| 水蜜桃网址| 黄色A级毛片| 成人网站视频在线观看| 日韩毛| 91av电影| 欧美一区二区三区四区视频| 秋霞福利视频| 天天日天天爽| 国产精品视频免费观看| 亚洲秘无码一区二区三区胖子| 影音先锋资源| 久久午夜无码鲁丝片午夜精品偷窥| 国产特級黃色大片| 欧美国产日韩另类| 肥臀AV在线| 成人视频91| 久久er视频| 尤物视频网站在线观看| 免费黄片视频大全| 亚洲日韩国产中文字幕| 日韩干| 99re99热| 一区二区三区无码专区| 麻豆一二三区| 一级a免一级a做片免费| 在线观看内射视频| 91看片看婬黄大片| 99精品在线观看视频| 国产三级国产三级国产| 黄片久久久| 亚洲一区二区三区在线| 91小宝寻花一区二区三区三级 | 人人操人人看人人摸| 日本黄色的视频| 国产高清黑人| 久久久久久久极品内射| 影音先锋黄色资源| 中文字幕+乱码+中文乱码91在线观看 | 一起操在线观看| 黄色小电影在线观看| 欧美一区二区三区婷婷五月| 激情一一区二区三区| 好吊一区二区| 青青草Av| 99re99热| 亚洲69v久久久无码精品| 七十路の高齢熟女千代子下载| 欧美久久久久久| 自拍偷拍精品| 在线成人免费视频| 一本道中文字幕| 精品无码一区二区三| 久久久国产视频| 中文字幕免费久久| 国产亚洲99久久精品| 亚洲A片视频| 婷婷网五月天| 亚洲无码内射| 国内精品一区二区三区| 国产精品93333333| 亚洲AV无码成人精品国产五月天 | 天天噜噜色| 广西少妇BBwBBwBBw| 无码一区二区三区免费看| 国产av综合网| 成人毛片18女人毛片真水| 波多无码在线| 黄色视频在线观看国产| www.五月婷婷| 丰滿老婦BBwBBwBBw| 日日射人妻| 青青草手机视频在线| 欧美精品三区| 一级黄色生活片| 91人人操人人爽| 中文字幕日韩高清| 99色热| 久久人妻| 国产精品怡红院有限公司| 国产婷婷精品| 人人人爽| 欧美国产一区二区| 无码日韩视频| 中文字幕在线精品| 国产黄色在线视频| 韩国GOGOGO高清| 日本肏逼视频| 欧亚一区二区| 亚洲观看黄色网| 国产精品视频免费在线观看| 免费精品视频| 亚洲国产91| 国产精品欧美综合在线| 中日韩中文字幕一区二区区别| 亚洲无码乱码av| 第一页在线观看| A片免费在线| 国产人成一区二区三区影院| 久久伊人大香蕉| 无码日逼视频| 天堂v视频| aaa国产| 婷婷丁香五月综合| 强奷伦奷片91| 亚洲精品视频在线观看网站| 日韩三级一区二区| 7x7x7x人成免费观学生视频| www.簧片| 精品一区二区三区免费毛片| 国产三级在线播放| 91麻豆免费看| 围内精品久久久久久久久白丝制服 | 玩弄小怮女在线观看| 韩国三级中文字幕HD久久精品 | 囯产伦精一区二区三区四区| 丁香五月综合啪啪| 欧美a片在线| 91中文字幕+乱码| 三级片大香蕉| 4080yy午夜理论片成人| 国产免费观看AV| www.91com| 四川BBB搡BBB搡多人乱| 99re在线观看| 亚洲影视中文字幕| 日韩性爱在线视频| 免费视频久久| 国产在线拍揄自揄拍无码福利| 人人摸人人搞| 99热在线中文字幕| 另类视频在线| 国产棈品久久久久久久久久九秃| 7799精品视频| 国产換妻4P视频| 91成人一区二区| 高潮流水视频| 人妻少妇无码视频| 91成人片| 色婷婷欧美在线播放内射| 台湾无码片| 欧美性爱视频在线观看| 国产精品电影| 成人a片在线免费观看| 亚洲日韩欧美色图| 欧美高清视频| 影音先锋三级| AA级黄色视频| 99热精品免费观看| 国产精品粉嫩福利在线| 中文字幕第一区| 一级A片视频免费看| 香蕉视频成人在线观看| 最新国产精品| 欧美v在线| 男人天堂中文字幕| 秋霞午夜久久| 久久国产99| 麻豆国产视频| 午夜成人大片| 青青草原在线视频免费观看| 麻豆亚洲AV成人无码久久精品| 麻豆AV96熟妇人妻| 操日视频| 狠狠干天天操| 成人免费在线| 色色网站| 三级片男人天堂| 九九九无码| 天干天干天夜夜爽| 国产一级婬片A片免费妖精视频 | WWWA级片| 翔田千里| 五月网站| 国产主播精品| 中文字幕精品1| 无码区一区二区三区| 久草资源在线| 杨幂操逼视频| 色综合加勒比| 欧美狠狠操| 人妻少妇被猛烈进入中文字幕| 久久久69| 欧美日韩高清无码| h片在线观看| 在线无码视频观看| 亚洲偷拍网| 超碰中文字幕| 日本天堂网在线观看| 成人大片在线观看| 超碰日本| 国内免费毛片| 色噜噜人妻丝袜无码影院| 婷婷五月av| 麻豆艾秋MD0056在线| 国产精品永久久久久久久久久 | 国产女人18毛片水18精| 高清无码免费在线观看| 国产精品7777| 九九精品视频在线观看| 色网在线| 亚洲狼人久久久精品| 五月婷婷六月丁香综合| 亚洲WWW| 污污污污污www在线观看优势 | 成人亚洲av| 午夜无码在线| 国产日本在线视频| 色婷婷激情综合网| 亚洲无码专区在线| 欧美成人性爱网址| 高清无码爱爱| 俺也去在线视频| 亚洲成人免费在线视频| 九九自拍视频| 中文丰满亲子伦| 狼友视频免费| 日韩乱伦中文字幕| 一级A片在线观看| 老熟女--91XX| 一区二区三区免费在线观看| 国产97视频| 亚洲午夜激情| 在线观看免费A片| 亚洲欧美日韩黑料吃瓜在线观看| 中字AV| 东京热国产| 新超碰在线观看| 色操网| 日日夜夜精品视频| 男女做爱无码| 在线无码中文| 夜夜撸视频| 在线播放亚洲无码| 欧美一区视频|