Asp.Net Core Swagger 接口分组(支持接口一对多暴露)

时间:2020-09-09 03:43:33 来源:

【摘要】 Asp.Net Core Swagger 接口分组(支持接口一对多暴露)考必过小编为大家整理了关于Asp.Net Core Swagger 接口分组(支持接口一对多暴露)的信息,希望可以帮助到大家!

Asp.Net Core Swagger 接口分组(支持接口一对多暴露)

标签:widthdeftitle判断servicesfalse核心包含count()

开始之前,先介绍下swagger常用方法。

services.AddSwaggerGen //添加swagger中间件

c.SwaggerDoc //配置swagger文档,也就是右上角的下拉框内容

c.IncludeXmlComments //引用程序集xml,用于加载出 备注信息等如图

c.AddSecurityDefinition //添加授权验证

c.DocInclusionPredicate //核心方法,指定分组被加载时 回调进入,也就是swagger右上角下拉框内的分组加载时

每一个分组加载时都会遍历所有控制器的action 进入一次这个方法体内,返回true则 暴露 否则隐藏

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

DocInclusionPredicate 使用

多分组步骤:

1.定义自定义标签

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

标签代码

2.将标签放在需要 分组的控制器或方法上

1 //可加载多个标签,用于1个接口对应多个分组
2 [ApiGroup(ApiGroupNames.Login,ApiGroupNames.SubmitProgram)]

使用标签

3.利用枚举反射加载出每个分组的Doc

 1 services.AddSwaggerGen(c =>
 2                 {                  
 3                     //遍历ApiGroupNames所有枚举值生成接口文档,Skip(1)是因为Enum第一个FieldInfo是内置的一个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>().FirstOrDefapt();
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 内写核心逻辑代码,利用反射的类进行判断标签值

 1                     //判断接口归于哪个分组
 2                     c.DocInclusionPredicate((docName, apiDescription) =>
 3                     {
 4                                 //反射拿到值
 5                                 var actionpst = apiDescription.ActionDescriptor.EndpointMetadata.Where(x => x is ApiGroupAttribute);
 6                                 if (actionpst.Count() > 0)
 7                                 {
 8                                     //判断是否包含这个分组
 9                                     var actionfilter = actionpst.FirstOrDefapt() as ApiGroupAttribute;
10                                     return actionfilter.GroupName.Count(x => x.ToString() == docName) > 0;
11                                 }
12                             return false;
13                         }
14                     });

DocInclusionPredicate逻辑代码

如需要全部接口暴露并不用打标签的,用SwaggerDoc单独加载一个Doc用于显示全部接口,在DocInclusionPredicate内加入 判断 如果docName等于全部接口的DocName那么直接return true即可,可灵活运行,可配置在json 也可配置在数据库等地方。用于指定分组是否暴露。以上加载Doc时, SwaggerEnumNames 就是需要暴露的分组列表,需要的自己定义来源

本文章参考https://www.cnblogs.com/caijt/p/10739841.html改写的 一对多分组模式。需要一对一的可以参考

Asp.Net Core Swagger 接口分组(支持接口一对多暴露)

标签:widthdeftitle判断servicesfalse核心包含count()

以上就是Asp.Net Core Swagger 接口分组(支持接口一对多暴露)的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
ASP.NET MVC 表单提交多层子级实体集合数据到控制器中 ASP.Net Core 发布后,静态资源访问不了 asp.net core 3.1 自定义中间件实现jwt token认证 asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP) Devexpress aspxgridview oncustomcallback 无刷新更新数据 Mataasploit 常见问题 device-aspect-ratio与aspect-ratio单屏布局 wsl 2 unbuntu 部署 asp.net core 使用 nginx 做
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net