1. AddSwaggerGen

AddSwaggerGen 是配置多个版本的swagger的关键

Path.Combine 当前项目运行的路径

UseSwaggerUI

主要分为 2 步骤  :

  1. 注册 Swagger

  2. 使用 Swagger

为了不让program.cs 文件夹内容过于冗余 复杂 我们把步骤  1和 2 写成扩展的方法

program.cs 入口文件夹:

using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1
{
public class Program
{
/// <summary>
/// asdlfkasdio
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers();
// 注册 Swagger
CtmSwaggerExt.AddSwaggerExt(builder); var app = builder.Build(); // IsDevelopment 是否是开发环境
if (app.Environment.IsDevelopment())
{
CtmSwaggerExt.UseSwaggerExt(app);
} app.UseAuthorization(); app.MapControllers(); app.Run();
}
}
}

Utility 文件夹 用于存放扩展的方法 ;

ApiVersions.cs :

namespace WebApplication1.Utility.SwaggerExt
{
/// <summary>
/// Swagger的版本控制
/// 使用枚举
/// </summary>
public enum ApiVersions
{
front_dev,
after_admin
}
}

CtmSwaggerExt.cs:

using Microsoft.OpenApi.Models;

namespace WebApplication1.Utility.SwaggerExt
{
/// <summary>
/// 自定义 Swagger扩展
/// 静态类中的静态方法
/// 扩展的方法都是使用静态类中的静态方法???
/// </summary>
public static class CtmSwaggerExt
{
/// <summary>
/// 注册 Swagger 的扩展方法
/// this 的作用是什么
/// builder 是 WebApplicationBuilder 的数据格式
/// </summary>
/// <param name="builder"></param>
public static void AddSwaggerExt(this WebApplicationBuilder builder)
{
var arr = typeof(ApiVersions).GetEnumNames().ToList();
builder.Services.AddEndpointsApiExplorer();
// swagger 配置
// 如果只要一个版本 builder.Services.AddSwaggerGen()即可
// 多个版本要用 option 配置
builder.Services.AddSwaggerGen(option =>
{
// 通过版本枚举循环展示不同版本的swagger项目
Console.WriteLine("option开始配置多个swagger版本配置");
// 1. 枚举类型的数据格式转换List格式
arr.ForEach(version =>
{
// ps 使用 OpenApiInfo 需要引入 using Microsoft.OpenApi.Models;
option.SwaggerDoc(version, new OpenApiInfo()
{
// 标题
Title = $"{version}===标题",
Version = $"{version}标注",
Description = $"版本说明 {version}"
});
});
// 2. 需要修改项目的属性 的生成 ==》 输出 ===》 文档文件 ==》 生成API文件 eg: WebApplication1.xml 文件
// 找到文档的绝对路径 xml 文件展示了控制器的注释内容[是要是文档注释都会显示的]
var file = Path.Combine(AppContext.BaseDirectory, "WebApplication1.xml");
Console.WriteLine(file); // C:\Users\朱龙旭\Desktop\WebApplication1\WebApplication1\bin\Debug\net6.0\WebApplication1.xml
// 显示控制器层注释
option.IncludeXmlComments(file, true);
// 对action 的名称进行排序,如果有多个,就可以看见效果了
// option.OrderActionsBy(o => o.RelativePath);
}); } /// <summary>
/// 使用 Swagger 的扩展方法
/// app 是 WebApplication 数据类型
/// </summary>
/// <param name="app"></param>
public static void UseSwaggerExt(this WebApplication app)
{
var arr = typeof(ApiVersions).GetEnumNames().ToList();
app.UseSwagger();
app.UseSwaggerUI(option =>
{
foreach (string version in arr)
{
// swagger.json 里面都是接口信息了
option.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{version}");
}
});
} }
}

控制器内容:

using Microsoft.AspNetCore.Mvc;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1.Controllers
{
/// <summary>
/// 测试注释是否展示
/// </summary>
[ApiController]
[Route("[controller]")]
// 指定当前的控制器是哪个Swagger版本的 指定给 后台_version02
[ApiExplorerSettings(IgnoreApi = false,GroupName = nameof(ApiVersions.after_admin))]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
}; private readonly ILogger<WeatherForecastController> _logger;
/// <summary>
/// DI
/// </summary>
/// <param name="logger"></param>
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
/// <summary>
/// GET方法
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GetWea阿斯顿rFoasasst")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
} /// <summary>
/// POST方法
/// </summary>
/// <returns></returns>
[HttpPost]
public IEnumerable<WeatherForecast> PostInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
} /// <summary>
/// PUT方法
/// </summary>
/// <returns></returns>
[HttpPut]
public IEnumerable<WeatherForecast> PutInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
/// <summary>
/// DELETE方法
/// </summary>
/// <returns></returns>
[HttpDelete]
public IEnumerable<WeatherForecast> DeleteInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}

001 C#配置多个版本Swagger说明的更多相关文章

  1. CentOS 6.5移除openJDK及JDK安装环境变量配置及JDK版本切换

    一.查找已经安装的open JDK [root@localhost ~]# rpm -qa|grep jdk java--openjdk-.el6_3.x86_64 java--openjdk-1.7 ...

  2. an'gularjs 环境搭建之NodeJS、NPM安装配置步骤(windows版本)

    NodeJS.NPM安装配置步骤(windows版本)  :http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/ ...

  3. windows下安装和配置多个版本的JDK

    https://jingyan.baidu.com/article/47a29f2474ba55c015239957.html 如何在windows下安装和配置多个版本的jdk,本文将带你在windo ...

  4. windows配置Python多版本共存

    windows配置Python多版本共存 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近Python开发蛮火的,三年前我的一个运维朋友就告诉我说Python语言将来会很火,当时 ...

  5. tomcat如何配置俩个版本

    Java-web除了JDK,还需配置服务器(tomcat); 如何配置俩个版本的tomcat; 1.将tomcat-bin目录下的startup.bat和catalina.bat里的%CATALINA ...

  6. struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本

    [本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...

  7. VBA连接MySQL数据库以及ODBC的配置(ODBC版本和MySQL版本如果不匹配会出现驱动和应用程序的错误)

    db_connected = False '获取数据库连接设置dsn_name = Trim(Worksheets("加载策略").Cells(2, 5).Value)  ---- ...

  8. maven工程指定jdk版本,maven全局配置jdk的版本

  9. rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装

    rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装 待办 https://blog.csdn.net/CSDN_duomaomao/art ...

  10. Python安装环境配置和多版本共存

    Python安装环境配置和多版本共存 1.环境变量配置: (1) 右键点击"计算机",然后点击"属性" (2) 然后点击"高级系统设置" ( ...

随机推荐

  1. pycham配置GitHub环境【一文了解window上GitHub的基本操作】

    基础用户设置[包含用户登录.密钥生成] 网络配置 外观->系统设置->https代理->检查连接 我这里测试网址是GitHub,连接成功即可后续操作[不成功别找我,我也不知道] gi ...

  2. 【WebSocket】一个简单的前后端交互Demo

    WebSocket资料参考: https://www.jianshu.com/p/d79bf8174196 使用SpringBoot整合参考: https://blog.csdn.net/KeepSt ...

  3. 【转载】 tensorflow batch_normalization的正确使用姿势

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/computerme/article/de ...

  4. 强化学习算法之DQN算法中的经验池的实现,experience_replay_buffer部分的实现

    本文的相关链接: github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置 ----- ...

  5. python库 —— gym retro 的 ROMs文件下载地址

    如题: python库 -- gym retro 的 ROMs文件下载地址: https://archive.org/details/No-Intro-Collection_2016-01-03_Fi ...

  6. 从baselines库的common/vec_env/vec_normalize.py模块看方差的近似计算方法

    在baselines库的common/vec_env/vec_normalize.py中计算方差的调用方法为: RunningMeanStd 同时该计算函数的解释也一并给出了: https://en. ...

  7. Spring Boot 中使用 JSON Schema 来校验复杂JSON数据

    JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSON Schema呢? 在数据交换领域,JSON Schema 以其强大的标准化能力,为定义和规范 JSON 数据的结构与规则提供 ...

  8. NuminaMath 是如何荣膺首届 AIMO 进步奖的?

    今年,Numina 和 Hugging Face 合作角逐 AI 数学奥林匹克 (AI Math Olympiad,AIMO) 的首届进步奖.此次比赛旨在对开放 LLM 进行微调,以使其能解决高中难度 ...

  9. int128输入输出流

    using i128 = __int128; istream &operator>>(istream &is, i128 &x) { string s; is &g ...

  10. Docker网络下-自定义网络实战

    通过前面两篇的学习,我们对docker网络及四大网络类型都了解了.本文,咱们就来学习docker的自定义网络.我们为什么需要自定义网络呢?是为了让各个主机分门别类,井井有条.方便关联,使得网络之间可以 ...