当前位置: 移动技术网 > IT编程>开发语言>.net > .NET Core 使用swagger进行分组显示

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

2019年05月08日  | 移动技术网IT编程  | 我要评论

纸箱套袋机,f-15战斗机,招商信诺保单查询

其实,和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类似,这里就不多介绍了

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网