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. web3 产品介绍:metamask 钱包 使用dapp更方便的钱包

    Metamask钱包是一种基于区块链技术的数字货币钱包,它允许用户在安全.便捷的环境下管理自己的加密资产.Metamask钱包是以太坊生态系统中最流行的钱包之一,它具有易于使用.安全性高和功能强大等优 ...

  2. 代码随想录Day4

    24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: 输入:head = [1, ...

  3. 智能工业化的关键一环:sim2real的仿真环境设计

    智能工业化,不论是智能机器人技术还是数字孪生技术,都不可避免的要使用的一个技术就是仿真环境技术. 在智能工业化还停留在学术阶段的时候,大家都可以使用一些开源的免费的仿真环境做research,但是到了 ...

  4. Jax框架 —— 如何在没有GPU和TPU的设备上debug代码 —— 在CPU上使用GPU仿真设置 —— Jax框架在多卡设备上的自动并行特性的仿真体验

    Jax计算框架是Google用来取代Tensorflow的新一代计算框架,这个框架使用类似pytorch的技术,但是在pytorch技术之上加入了更加强大的技术,但是这也导致该框架使用起来要比pyto ...

  5. 【转载】 linux中umask命令介绍

    版权声明:本文为CSDN博主「立二拆四i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/weixin_4408 ...

  6. C#.Net筑基-解密委托与事件

    委托与事件是C#中历史比较悠久的技术,从C#1.0开始就有了,核心作用就是将方法作为参数(变量)来传递和使用.其中委托是基础,需要熟练掌握,编程中常用的Lambda表达式.Action.Func都是委 ...

  7. [SDOI2010] 城市规划 题解

    前言 题目链接:洛谷. 题意简述 树套环上求至少间隔两个位置的最大独立集. (树套环,即树上每个结点都是一个结点或环) 题目分析 将题目拆解成树上 DP 和环上 DP 即可.用 tarjan 缩点就行 ...

  8. Navicat 导入sql文件执行失败问题的处理

    之前有很多次用Navicat执行导出的sql文件,跑着跑着就批量报错,有的报错能看懂,有的报错压根就找不到,很长的记录中翻也不好翻. 现在用命令行执行的话,还是挺好使. 1进入mysql安装路径下的b ...

  9. FreeSWITCH对接http协议的tts服务

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9   FreeSWITCH里面有个mod_tts_commandline模块,可以用来对接http协议的tts服务,今 ...

  10. JAVA——拆分位数

    2024/07/09 题目: 解题: import java.util.Scanner; public class Main { public static void main(String[] ar ...