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. 【H5】04 建立超链接

    摘自: https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks 超链接 ...

  2. 切记:使用nvidia omniverse时一定要用2T的固态硬盘

    最近在用nvidia omniverse时突然发现这样的一个问题,那就是这个软件实在是太太了,一个组件就4个多GB大小,如果安装几个组件后那么几十GB的硬盘就没有了,同时由于这个体积太大,因此再启动和 ...

  3. PyTorch+昇腾 共促AI生态创新发展

    原文链接: https://mp.weixin.qq.com/s/s8jNzTo0DM_LjyUwYDVgGg ============================================ ...

  4. 使用MindSpore_hub 进行 加载模型用于推理或迁移学习

    从官方资料: https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/use/save_model.html?highlight=save_chec ...

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

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

  6. java获取包下所有的类

    1.背景 给一个Java的包名,获取包名下的所有类.. 根据类上的注解,可以展开很多统一操作的业务 2.直接看代码-spring环境下 package com.qxnw.digit.scm.commo ...

  7. DataOps 新趋势:联通数科如何利用 DolphinScheduler 实现数据一体化管理

    引言 在DataOps(数据运营)的推动下,越来越多的企业开始关注数据研发和运营的一体化建设.DataOps通过自动化和流程优化,帮助企业实现数据的高效流转和管理. 当前,Apache Dolphin ...

  8. LaTeX 书写函数

    \[\text{text 模式} \] \[\mathrm{mathrm 模式} \] \[\textit{textit 模式} \] \[\operatorname{operatorname 模式} ...

  9. .NET 开源报表神器 Seal-Report

    前言 Seal-Report 是一款.NET 开源报表工具,拥有 1.4K Star.它提供了一个完整的框架,使用 C# 编写,最新的版本采用的是 .NET 8.0 . 它能够高效地从各种数据库或 N ...

  10. Docker网络中篇-docker网络的四种类型

    通过上一篇学习,我们对docker网络有了初步的了解.本篇,咱们就来实战docker网络. docker网络实战 实战docker网络,我们将从以下几个案例来讲解 1:birdge是什么? 2:hos ...