- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
周末,写点简单的水一下.
新版本的vs创建项目的时候可以选择自带一个swagger。然而这只是基本的swagger功能.
几个接口无所谓啦,随着接口越来越多,就这么丢给你,一时间也会懵逼,所以这篇文章要做的有两个功能.
右键项目>属性>生成>输出>XML文档文件路径,添加输出的路径,我一般会设置在程序集下的根路径,例如这样:
文件命名什么的随意,一般跟项目有关例如:FastEasy.Readme.xml.
然后去swagger相关的Module模块中去添加一些配置。我这个文章相关的项目一开始的时候就将这些注入配置单独搞成独立的一个模块,所以你只是看到这个文章,那默认就在Programs里面找AddSwaggerGen就好.
Services.AddSwaggerGen(s => { // 多版本 typeof (SwaggerVersion).GetEnumNames().ToList().ForEach(v => { s.SwaggerDoc(v, new Microsoft.OpenApi.Models.OpenApiInfo { Version = v, Description = $ " {v} API " , Title = v, }); // 添加注释 var basePath= AppDomain.CurrentDomain.BaseDirectory; var xmlPath = Path.Combine(basePath, " FastEasy.Readme.xml " ); s.IncludeXmlComments(xmlPath, true ); }); });
。
。
如果不需要切换版本,那就关注添加注释下面三行代码就好,获取注释文档的路径,然后添加到swagger中.
接下来就是多版本切换,上面的代码已经是了,需要在意的地方是typeof里的SwaggerVersion。这是创建的一个枚举,然后在枚举中按需添加不同的版本切换,例如 。
public enum SwaggerVersion { FastEasy = 1 , OpenAPI = 2 }
。
如果要使用多版本,中间件管道里也要改一下 。
app.UseSwagger(); app.UseSwaggerUI(s => { typeof (SwaggerVersion).GetEnumNames().ToList().ForEach(v => { s.SwaggerEndpoint($ " swagger/{v}/swagger.json " , $ " {v} " ); s.RoutePrefix = string .Empty; }); });
。
到这里就已经完成90%了。最后一步就是给不同的方法或者控制器添加[ApiExplorerSettings(GroupName = "OpenAPI")] 。
[HttpGet( " MUL " )] [ApiExplorerSettings(GroupName = " OpenAPI " )] public int MUL( int i, int j) { return test.MUL(i, j); }
。
原本是加减乘除4个接口,现在就是FastEasy下两个,OpenAPI下两个(只是测试,跟名称毫无关系) 。
现在完成了99%了。如果像我这种小公司,没有版本的区别,无非就是为了看着方便,因为功能模块去区分开来。就像现在,查看文档的时候可以根据分类找到相对应的接口,不至于一眼乱糟糟的.
但是实际上并未完成版本控制,因为你会发现,他们的请求路径是差不多的。如果要完成真正的版本控制,有两种方法,第一种简单,路由上写死了:/v1/xxxx /v2/xxxxx…… 。
第二种就是自定义路由特性:添加一个特性配置的类:SwaagerRouteAttribute。我直接贴代码了,很简单的几行,代码的注释足以解释清楚了 。
public class SwaagerRouteAttribute : RouteAttribute, IApiDescriptionGroupNameProvider { /// <summary> /// 默认的路由配置 /// </summary> /// <param name="actionName"></param> public SwaagerRouteAttribute( string actionName) : base (actionName) { } /// <summary> /// 分组名称,控制不同版本:等同于配置ApiExplorerSettings(GroupName ="FastEasy") /// </summary> public string ? GroupName { get ; set ; } /// <summary> /// 自定义的路由配置 /// </summary> /// <param name="version"></param> /// <param name="actionName"></param> public SwaagerRouteAttribute(SwaggerVersion version, string actionName = " [action] " ) : base ($ " /{version.ToString()}/[controller]/{actionName} " ) { GroupName = version.ToString(); } }
。
现在!用自己封装的路由属性添加到方法上面(截图看的全) 。
。
此时才算完成真的版本控制效果:
啊掰掰~ 。
。
最后此篇关于6.swagger完善:界面显示注释+多版本控制的文章就讲到这里了,如果你想了解更多关于6.swagger完善:界面显示注释+多版本控制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
昨天发布于: MySQL: Finding most frequently occuring values in table 但想知道是否有办法改进答案,因为您不必在最后重复代码来获取MAX(COUN
在开发了一个展示基本智能的简单算法后,我渴望进行递归 self 改进,我遇到的问题是由于我对递归缺乏理解。 我明白,如果我有一些东西来评估我正在使用的算法的“适应性”以进行改进(我为算法提供其自身的二
我们使用二进制 (16) 字段来存储 IP 地址。我们这样做是因为它可以同时保存 IPv4 和 IPv6 地址,并且可以轻松地与 .Net IPAddress 类一起使用。 但是,我创建了以下 SQL
我在使用 wxPython 时遇到了一些纯粹的外观问题。例如,标签和它们所代表的控件之间的关系——一切看起来总是至少偏离目标 2-3 个像素,有时甚至更糟。在我当前正在创建的对话中,我已将文本控件的字
我正在开发一个具有 UICollectionView 的应用程序 - Collection View 的工作是显示来自网络服务的数据。 我正在尝试实现的应用程序的一个功能是使用户能够将此 UIColl
我(终于!)找到了一种在玻璃上呈现 Windows.Forms 控件的方法,它似乎没有任何重大缺点,也没有任何大的实现时间。它的灵感来自 this article来自 Coded,它基本上解释了如何
我是一名优秀的程序员,十分优秀!