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. DASCTF2022.07赋能赛PWN部分WP

    DASCTF2022.07赋能赛PWN部分WP eyfor 程序保护情况 64位ida逆向 可以看见是一个随机数的逻辑,只要我们猜不对4次就可以进入漏洞函数,但是我感觉这原本可能是==号,让用随机数的 ...

  2. 【MySQL】JSON相关

    一些概念 MySQL里的json分为json array和json object. $表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object, ...

  3. 汽车模具设计软件 —— 达索集团的Catia

    相关: https://www.3ds.com/zh/products-services/catia/ Catia是Dassault Systems公司推出的产品造型软件,广泛应用于汽车.航空.机械等 ...

  4. Google的蛋白质结构预测项目代码(Demo)

    相关: Artificial Intelligence | 60 Minutes Full Episodes

  5. nvtop —— GPU使用情况的可视化工具

    安装: sudo apt install nvtop

  6. 同一块石头搬到了两次的List<Map> 转List<dto>的问题

    不多比比 it is shame to talking about this List<Map<String, Object>> maps = reader.readAll() ...

  7. CH03_布局

    第3章:布局 本章目标 理解布局的原则 理解布局的过程 理解布局的容器 掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素.为在WPF 窗口中放置多个元 ...

  8. python分布式事务方案(一)tcc

    python分布式事务方案(一)tcc 随着单体应用的拆分以及服务化的流行,现在分布式事务已经比较常见,分布式事务理论ACID.CAP.BASE等我就不说了,现在就直接说一下一种常见的解决方案-tcc ...

  9. loj6669 Nauuo and Binary Tree 题解

    https://loj.ac/p/6669 赛时做法 先 \(n-1\) 次问出深度 逐层考虑.slv(vector<int> a,vector<int> b) 表示在点集 \ ...

  10. C#应用 - 破解注入外挂必备神器Harmony

    目录 前言 1,快速开始 1.1 SomeGameClass类 1.2 Patch01类 1.3 MyPatcher类 1.4 跑起来 2,破解 2.1 类库项目 2.2 winform项目 3,注入 ...