欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET Core 使用swagger进行分组显示

程序员文章站 2022-04-09 09:42:51
其实,和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 = "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类似,这里就不多介绍了