6.swagger完善:界面显示注释+多版本控制
周末,写点简单的水一下。
新版本的vs创建项目的时候可以选择自带一个swagger。然而这只是基本的swagger功能。

几个接口无所谓啦,随着接口越来越多,就这么丢给你,一时间也会懵逼,所以这篇文章要做的有两个功能。
- 给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完善:界面显示注释+多版本控制的更多相关文章
- swagger webapi控制器注释不显示
swagger是webapi文档描述及调试工具,要在asp.net mvc中使用swagger,需要安装Swashbuckle.Core这个包,安装好后会在app_start中生成SwaggerCon ...
- ASP.NET Core Swagger 显示接口注释
在Startup中 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title ...
- Swagger中显示注释
Webapi中Swagger中不显示注解的解决方法 1.找见生成项目时候生成的xml文件.查看存放路劲方法: 右键项目-->点击属性-->在属性中选择“生成”就能看见xml文件存放路径: ...
- 从壹开始前后端分离 [.netCore 填坑 ] 三十四║Swagger:API多版本控制,带来的思考
前言 大家周二好呀,.net core + Vue 这一系列基本就到这里差不多了,今天我又把整个系列的文章下边的全部评论看了一下(我是不是很负责哈哈),提到的问题基本都解决了,还有一些问题,已经在QQ ...
- 三:.net core(.NET 6)给swagger添加文档注释详细步骤
提供swagger文档注释. 0.先给api加上标题注释和返回值注释: 然后,启动见证奇迹: What the hell?没得注释?查看当前自动生成的swagger代码如下: 首先,我们需要对需要注释 ...
- Asp.Net Core中使用Swagger,你不得不踩的坑
很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagge ...
- 5分钟了解swagger
5分钟了解swagger https://blog.csdn.net/i6448038/article/details/77622977 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变 ...
- Miniprofiler在swagger、vue、angular中的使用
本篇分为以下几个部分: 1.Swagger的简单应用 2.Miniprofier的后台配置 3.跨域配置 4.在angular中显示Miniprofier 5.在vue中显示Miniprofier ...
- C# WebAPI中使用Swagger
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系变成了API接口:API文档变成了前 ...
- 了解swagger
https://blog.csdn.net/i6448038/article/details/77622977 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.先后端分离 ...
随机推荐
- Oracle rac环境的数据库导入操作记录
搞某一大项目的性能测试,将Oracle数据库dmp文件(211G)导入性能测试环境. 因为Oracle部署方式为rac,数据存储到共享磁盘.但由于对rac了解不足,这个过程中犯了两个错误: ① 表空间 ...
- GO通道:无缓冲通道与缓冲通道
转载请注明出处: 1.通道定义 在多个协程之间进行通信和管理,可以使用 Go 语言提供的通道(Channel)类型.通道是一种特殊的数据结构,可以在协程之间进行传递数据,从而实现协程之间的通信和同步. ...
- IDEA连接数据库
我只想卷死各位,或者被各位卷死 在入门案例映射配置文件中存在报红的情况.问题如下: 产生的原因:Idea和数据库没有建立连接,不识别表信息.但是大家一定要记住,它并不影响程序的执行. 解决方式:在Id ...
- FPGA加速技术:在数据中心和云计算中的应用
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1. 应用场景介绍 4. ...
- Java 设计模式实战系列—策略模式
从优惠打折活动说起 电商平台为了增加销量经常搞一些活动,比如 618.双十一,还有一些节假日活动,根据销量的变化又经常更新不同的活动.最开始为了增加销量,全场都六折: // 打六折 public Bi ...
- 解决redis从服务器未配置主服务器密码导致数据未同步&磁盘饱满问题
问题前置场景 本人前几天买了一台2核4G+40G磁盘空间的云服务器用来学习使用,在服务器上安装了docker.为了学习redis主从架构,使用docker-compose部署了一主二从三台redis服 ...
- 浅析switch和if(开发中这两者的优缺点;分析出优缺点在使用就能更确定自己需要使用哪个函数了)
分析 Switch 相较于 if 的优点 1.switch 执行效率 高于 if 的执行效率 分析: switch是在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执 ...
- HCL实验:3.两台PC通过路由器交换机PING通
拓扑图 路由器配置网关 PC1 ping PC2, PC3
- 用 Golang 从0到1实现一个高性能的 Worker Pool(一) - 每天5分钟玩转 GPT 编程系列(3)
目录 1. 概述 2. 设计 2.1 让 GPT-4 给出功能点 2.2 自己总结需求,再给 GPT 派活 3. 实现 3.1 你先随意发挥 3.2 你得让 Worker 跑起来呀 3.3 你说说 P ...
- 使用Canal同步mysql数据到es
一.简介 Canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7 ...