其實,和swagger版本管理類似;只是平時介面太多;不好供前端人員進行篩選。 下麵進入主題: 首先: 然後設置UI: 最後就是使用啦: 在controller或者action上打上 GroupName根據自己的命名進行分組就可以了. 總的來說和設置apiVersion類似,這裡就不多介紹了 ...
其實,和swagger版本管理類似;只是平時介面太多;不好供前端人員進行篩選。
下麵進入主題:
首先:
1 //註冊Swagger生成器,定義一個和多個Swagger 文檔 2 services.AddSwaggerGen(c => 3 { 4 c.SwaggerDoc("v1", new Info 5 { 6 Version = "v1", 7 Title = "公共模塊", 8 Description = "介面說明(多模式管理,右上角切換)", 9 TermsOfService = "", 10 Contact = new Contact { Name = "Fatefox", Email = "[email protected]" } 11 }); 12 c.SwaggerDoc("gp", new Info { Title = "登錄模塊", Version = "GP" }); 13 c.SwaggerDoc("mom", new Info { Title = "業務模塊", Version = "YW" }); 14 c.SwaggerDoc("dm", new Info { Title = "其他模塊", Version = "QT" }); 15 //設置要展示的介面 16 c.DocInclusionPredicate((docName, apiDes) => 17 { 18 if (!apiDes.TryGetMethodInfo(out MethodInfo method)) 19 return false; 20 /*使用ApiExplorerSettingsAttribute裡面的GroupName進行特性標識 21 * DeclaringType只能獲取controller上的特性 22 * 我們這裡是想以action的特性為主 23 * */ 24 var version = method.DeclaringType.GetCustomAttributes(true).OfType<ApiExplorerSettingsAttribute>().Select(m => m.GroupName); 25 if (docName == "v1" && !version.Any()) 26 return true; 27 //這裡獲取action的特性 28 var actionVersion = method.GetCustomAttributes(true).OfType<ApiExplorerSettingsAttribute>().Select(m => m.GroupName); 29 if (actionVersion.Any()) 30 return actionVersion.Any(v => v == docName); 31 return version.Any(v => v == docName); 32 }); 33 //添加授權 34 c.AddSecurityDefinition("Bearer", new ApiKeyScheme 35 { 36 Description = "請輸入帶有Bearer開頭的Token", 37 Name = "Authorization", 38 In = "header", 39 Type = "apiKey" 40 }); 41 //認證方式,此方式為全局添加 42 c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> 43 { 44 { "Bearer", Enumerable.Empty<string>() } 45 }); 46 //c.OperationFilter<WebUserAPI.Common.AssignOperationVendorExtensions>(); 47 //設置SjiggJSON和UI的註釋路徑. 48 // 為 Swagger JSON and UI設置xml文檔註釋路徑 49 var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location); 50 var xmlPath = Path.Combine(basePath, "WebUserAPI.xml"); 51 var xmlmodelPath = Path.Combine(basePath, "WebUserAPIMdoel.xml");//添加model註釋 52 c.IncludeXmlComments(xmlmodelPath); 53 c.IncludeXmlComments(xmlPath, true);//controller註釋;必須放最後,否則後面的會覆蓋前面的 54 });
然後設置UI:
// 添加Swagger介面文檔服務 app.UseSwagger(); //啟用SwaggerUI樣式 app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "公共模塊"); c.SwaggerEndpoint("/swagger/gp/swagger.json", "登錄模塊"); c.SwaggerEndpoint("/swagger/mom/swagger.json", "業務模塊"); c.SwaggerEndpoint("/swagger/dm/swagger.json", "其他模塊"); c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None); });
最後就是使用啦:
在controller或者action上打上
ApiExplorerSettings(GroupName = "gp")
GroupName根據自己的命名進行分組就可以了.
總的來說和設置apiVersion類似,這裡就不多介紹了