.NET Core 使用swagger進行分組顯示


其實,和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 = "476515159@qq.com" }
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類似,這里就不多介紹了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM