<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Asp.Net Core Swagger 接口分組(支持接口一對(duì)多暴露)

      開始之前,先介紹下swagger常用方法。

      services.AddSwaggerGen    //添加swagger中間件

      c.SwaggerDoc  //配置swagger文檔,也就是右上角的下拉框內(nèi)容

       

      c.IncludeXmlComments  //引用程序集xml,用于加載出 備注信息等如圖

       

       

      c.AddSecurityDefinition  //添加授權(quán)驗(yàn)證

       

       

       c.DocInclusionPredicate    //核心方法,指定分組被加載時(shí) 回調(diào)進(jìn)入,也就是swagger右上角下拉框內(nèi)的分組加載時(shí)

      每一個(gè)分組加載時(shí)都會(huì)遍歷所有控制器的action 進(jìn)入一次這個(gè)方法體內(nèi),返回true則 暴露 否則隱藏

      1                     c.DocInclusionPredicate((docName, apiDescription) =>
      2                     {
      3                           //docName分組 的apiDescription 方法是否暴露
      4                           //return true 暴露 反之 隱藏
      5                           return true;
      6                     });
      DocInclusionPredicate 使用

      多分組步驟:

      1.定義自定義標(biāo)簽

       1     public class ApiGroupAttribute : Attribute
       2     {
       3         public ApiGroupAttribute(params ApiGroupNames[] name)
       4         {
       5             GroupName =  name;
       6         }
       7 
       8         public ApiGroupNames[] GroupName { get; set; }
       9 
      10     }
      11 
      12     public enum ApiGroupNames
      13     {
      14         [GroupInfo(Title = "登錄接口", Description = "用于登錄", Version = "20200828")]
      15         Login,
      16     }
      17 
      18     public class GroupInfoAttribute : Attribute
      19     {
      20         public string Title { get; set; }
      21         public string Version { get; set; }
      22         public string Description { get; set; }
      23     }
      標(biāo)簽代碼

      2.將標(biāo)簽放在需要 分組的控制器或方法上

      1 //可加載多個(gè)標(biāo)簽,用于1個(gè)接口對(duì)應(yīng)多個(gè)分組
      2 [ApiGroup(ApiGroupNames.Login,ApiGroupNames.SubmitProgram)]
      使用標(biāo)簽

      3.利用枚舉反射加載出每個(gè)分組的Doc

       1 services.AddSwaggerGen(c =>
       2                 {                  
       3                     //遍歷ApiGroupNames所有枚舉值生成接口文檔,Skip(1)是因?yàn)镋num第一個(gè)FieldInfo是內(nèi)置的一個(gè)Int值  
       4 typeof(ApiGroupNames).GetFields().Skip(1).ToList().ForEach(f =>
       5                     {
       6                         //獲取枚舉值上的特性
       7                         if (SwaggerEnumNames.Count(x => x.ToLower() == f.Name.ToLower()) > 0)
       8                         {
       9                             var info = f.GetCustomAttributes(typeof(GroupInfoAttribute), false).OfType<GroupInfoAttribute>().FirstOrDefault();
      10                             c.SwaggerDoc(f.Name, new Microsoft.OpenApi.Models.OpenApiInfo
      11                             {
      12                                 Title = info?.Title,
      13                                 Version = info?.Version,
      14                                 Description = info?.Description
      15                             });
      16                         }
      17                     });
      18 }
      View Code

      4.DocInclusionPredicate 內(nèi)寫核心邏輯代碼,利用反射的類進(jìn)行判斷標(biāo)簽值

       1                     //判斷接口歸于哪個(gè)分組
       2                     c.DocInclusionPredicate((docName, apiDescription) =>
       3                     {
       4                                 //反射拿到值
       5                                 var actionlist = apiDescription.ActionDescriptor.EndpointMetadata.Where(x => x is ApiGroupAttribute);
       6                                 if (actionlist.Count() > 0)
       7                                 {
       8                                     //判斷是否包含這個(gè)分組
       9                                     var actionfilter = actionlist.FirstOrDefault() as ApiGroupAttribute;
      10                                     return actionfilter.GroupName.Count(x => x.ToString() == docName) > 0;
      11                                 }
      12                             return false;
      13                         }
      14                     });
      DocInclusionPredicate邏輯代碼

       

      如需要全部接口暴露并不用打標(biāo)簽的,用SwaggerDoc單獨(dú)加載一個(gè)Doc用于顯示全部接口,在DocInclusionPredicate內(nèi)加入 判斷 如果docName等于全部接口的DocName那么直接return true即可,可靈活運(yùn)行,可配置在json 也可配置在數(shù)據(jù)庫等地方。用于指定分組是否暴露。以上加載Doc時(shí), SwaggerEnumNames 就是需要暴露的分組列表,需要的自己定義來源

       

      本文章參考 http://www.rzrgm.cn/caijt/p/10739841.html 改寫的 一對(duì)多分組模式。需要一對(duì)一的可以參考

      posted @ 2020-08-28 11:32  雲(yún)瑞  閱讀(1460)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产男女猛烈无遮挡免费视频| 久久精品免费自拍视频| 无码专区一va亚洲v专区在线| 亚洲欧洲日韩国内高清| 1区2区3区4区产品不卡码网站| av无码小缝喷白浆在线观看| 九九久久精品国产免费看小说| 影音先锋人妻啪啪av资源网站| 天堂中文8资源在线8| 亚洲国产精品va在线观看麻豆| 真人无码作爱免费视频| A三级三级成人网站在线视频| 久久精品夜夜夜夜夜久久| 中超| 亚洲午夜精品国产电影在线观看| 亚洲国产成人无码网站大全| 国产日韩成人内射视频| 成人午夜大片免费看爽爽爽| 高潮潮喷奶水飞溅视频无码| 成熟少妇XXXXX高清视频| 色综合视频一区二区三区| 精品国产一区二区三区久久女人| 色综合热无码热国产| 99久久精品费精品国产一区二| 成人av亚洲男人色丁香| 亚洲欧洲精品日韩av| 少妇人妻偷人精品无码视频新浪 | 在线a级毛片无码免费真人| 亚洲の无码国产の无码步美| 兴宁市| 国产av一区二区三区精品| 久久综合色之久久综合色| 人妻伦理在线一二三区| 中文字幕一区二区人妻电影| 日韩精品区一区二区三vr| 亚洲VA中文字幕无码久久不卡| 国产精品天干天干综合网| 国产粉嫩系列一区二区三| 免费可以在线看a∨网站| 无码综合天天久久综合网| 蜜桃一区二区三区在线看|