【个人博客搭建】(6)搭建swagger文档

news2025/2/25 21:19:25

1、前言:

        其实在创建webapi时我们就已经选择了swagger了。

也就是代码

app.UseSwagger();
app.UseSwaggerUI();

但是我们可以对其进行拓展,补充信息。

像常需要的action接口中文信息,Controller控制器中文信息等...

进入正题。

2、添加版本枚举

/// <summary>
/// Api接口版本 自定义 (一般有一个就够了)
/// ps:注意用小写
/// </summary>
public enum ApiVersions
{
    /// <summary>
    /// V1 版本
    /// </summary>
    v1 = 1,

    /// <summary>
    /// V2 版本
    /// </summary>
    v2 = 2,
}

3、注入服务:(已踩坑)

builder.Services.AddSwaggerGen(c =>
{
    typeof(SwaggerDocSettings.ApiVersions).GetEnumNames().ToList().ForEach(version =>
    {
        c.SwaggerDoc(version,
            new OpenApiInfo
                    {
                        Title = "Plateau-Poetize " + version,
                        Version = version,
                        Description = "根据开源项目Poetize编写Net版本WebApi。",
                        Contact = new OpenApiContact { Name = "Contact:Plateau", Url = new Uri("https://gitee.com/HelloAspNet") },
                        License = new OpenApiLicense { Name = "License:Plateau", Url = new Uri("https://gitee.com/HelloAspNet") },
                    });
                c.OrderActionsBy(o => o.RelativePath);
            });

    // 设置API注释文档生成器
    var apiname = Assembly.GetExecutingAssembly().GetName().Name;
    var xmlFile1 = apiname + ".xml";
    var xmlPath1 = Path.Combine(AppContext.BaseDirectory, xmlFile1);

    //默认的第二个参数是false,这个是controller的注释,记得修改。
    //(PS:这里路径没文件会报错的。如果把Api的项目文件节点加上<GenerateDocumentationFile>true</GenerateDocumentationFile>就不会了)
    c.IncludeXmlComments(xmlPath1, true);
});

4、版本选择项目。(我这不做循环处理了)

app.UseSwaggerUI(c =>
{
    //左上角的下拉框(默认不配置就只有一个)
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "BlogWebApi v1");
    c.SwaggerEndpoint("/swagger/v2/swagger.json", "My API v2");
});

5、添加路由特性。

        5.1、按原生版应该走。

[ApiVersion("1")]
[Route("api/v{version:apiVersion}/[controller]/[action]")]

但是报错,补充

builder.Services.AddRouting(options =>
{
    options.ConstraintMap.Add("apiVersion", typeof(ApiVersionRouteConstraint));

});

还是不行,需要实现了'IParameterPolicy'接口。

后续换了中方式,查看别人的代码实现。新增特性去实现

        5.2、创建类,设置特性。

        这里主要是为了实现右上角版本选择后实现显示不同版本接口问题。之前的方式会带入一个版本的参数,或者不管如何选,后会有所有接口信息列表

 /// <summary>
 /// 自定义路由 /api/{version}/[controler]/[action]
 /// swagger版本
 /// </summary>
 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
 public class ApiVersionCustomRouteAttribute : RouteAttribute, IApiDescriptionGroupNameProvider
 {

     /// <summary>
     /// 分组名称,是来实现接口 IApiDescriptionGroupNameProvider
     /// </summary>
     public string GroupName { get; set; }


     /// <summary>
     /// 常用方式
     /// </summary>
     /// <param name="version"></param>
     /// <param name="actionName"></param>
     public ApiVersionCustomRouteAttribute(SwaggerDocSettings.ApiVersions version, string actionName = "")
         : base($"/BlogApi/{version.ToString()}/[controller]/[action]")
     {
         GroupName = version.ToString();
     }


     /// <summary>
     /// 可自定义action的
     /// </summary>
     /// <param name="actionName"></param>
     /// <param name="version"></param>
     public ApiVersionCustomRouteAttribute(string actionName, SwaggerDocSettings.ApiVersions version)
         : base($"/BlogApi/{version.ToString()}/[controller]/{actionName}")
     {
         GroupName = version.ToString();
     }
 }

5.3、添加特性。这个必须要有一个加在Controller上边,然后具体的方法可加也可不加。

[ApiVersionCustomRoute(SwaggerDocSettings.ApiVersions.v1)]

5.4、测试

 /// <summary>
 /// 测试连接1
 /// </summary>
 /// <param name="t">字符串</param>
 /// <returns></returns>
 [HttpGet]
 [ApiVersionCustomRoute(SwaggerDocSettings.ApiVersions.v1)]
 public string Test(string t)
 {
     return "【Test】OK.输入的是:" + t;
 }
 /// <summary>
 /// 测试连接2
 /// </summary>
 /// <param name="t">字符串</param>
 /// <returns></returns>
 [HttpGet]
 [ApiVersionCustomRoute("GetTest",SwaggerDocSettings.ApiVersions.v1)]
 public string TestGet(string t)
 {
     return "【Test】OK.输入的是:" + t;
 }

 /// <summary>
 /// 测试连接3
 /// </summary>
 /// <param name="t">字符串</param>
 /// <returns></returns>
 [HttpGet]
 [ApiVersionCustomRoute(SwaggerDocSettings.ApiVersions.v2)]
 public string Test2(string t)
 {
     return "【Test2】OK.输入的是:" + t;
 }

运行效果:

V1:

V2:

5.5、以上就是对swagger文档的操作了。

已踩坑....(可直接复制使用)

5.6、其他:拓展

像这些记得还可以对样式进行修改,有css文件处理。

另外代码中复制一句:Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle。(官方)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

009、Python+fastapi,第一个后台管理项目走向第9步:ubutun 20.04下安装vscode+git环境配置

一、说明 git是一定要配置的&#xff0c;由于是白嫖的无影云电脑&#xff0c;东西得保存在网上&#xff0c;就继续白嫖gitee吧&#xff0c;显然国内github是不太合适的了 二、安装git 直接安装sudo apt install -y git git --version git version 2.25.1 三、配置git 在git上…

走近网络安全公司:F5探索应用安全至简之道

伴随企业加速数字化转型工作、扩展到新的基础设施环境并采用微服务架构&#xff0c;企业正在拥抱混合和多云基础设施所带来的灵活性。现在跨越四种环境部署应用的企业&#xff0c;其平均需要管理和保护的应用数据路径比应用仅限本地部署时多10倍&#xff0c;复杂性呈指数级增加…

Matlab r2023b Simulink 给子系统添加封面

写这篇记录的原因是&#xff0c;r2023b版本里改动了自定义封面的界面&#xff0c;而我是一个新手小白&#xff0c;零基础&#xff0c;探索一天之后发现实现方法。最终效果如图&#xff1a; 步骤1&#xff1a;打开软件&#xff0c;点击Simulink&#xff0c;再打开含有子系统的工…

【贪心 堆 】3081. 替换字符串中的问号使分数最小

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

一夜爆红的4款国产软件,却一度被大众误以为是外国人开发

在现今高度信息化的时代&#xff0c;计算机已经深深地渗透到了我们生活的每一个角落。 从日常的办公学习到娱乐休闲&#xff0c;几乎都离不开计算机技术的支持。而在这背后&#xff0c;软件作为计算机的灵魂&#xff0c;其发展历史可谓波澜壮阔。 中国软件产业经过多年的积累和…

基于Copula函数的风光功率联合场景生成_任意修改生成的场景数目(附带Matlab代码)

基于Copula函数的风光功率联合场景生成 削减为6个场景 部分展示削减为5个场景 部分展示 风光等可再生能源出力的不确定性和相关性给系统的设计带来了极大的复杂性&#xff0c;若忽略这些因素&#xff0c;势必会在系统规划阶段引入次优决策风险。因此&#xff0c;在确定系统最佳…

JavaScript权威指南(第7版) 笔记 - 第 7 章 数组

能用代码说清楚的&#xff0c;绝不多废话&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Linux创始人Linus的名言&#xff1a;Talk is cheap&#xff0c;show me the code ! &#xff0c;博主技术博文会精心给出能说明问题的范例代码&#xff01;…

【Linux】Linux信号

目录 信号的概念 生活中的信号 Linux中的信号 kill命令 kill 命令的使用 常见的信号 命令行代码示例 注意事项 信号的处理方式 产生信号 信号的捕捉 信号捕捉示意图 内核如何实现信号捕捉 信号的捕捉与处理 小结 阻塞信号 信号在内核中的表示图 信号集操作函数…

基于大数据的全国热门景点数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文将介绍如何使用Python中的Pandas库进行数据挖掘&#xff0c;并结合Flask Web框架实现一个旅游景点数据分析系统。该系统将包括以下功能模块&#xff1a;热门景点概况、景点星级与评分分析、景…

AI光芯登上Science,开启算力新纪元

智能光芯片“太极”&#xff1a;清华大学的科技壮举&#xff0c;开启算力新纪元 在科技的浩瀚星海中&#xff0c;每一次创新都是对未知世界的探索和征服。近日&#xff0c;清华大学电子工程系与自动化系的联合团队&#xff0c;凭借其深厚的科研实力和创新精神&#xff0c;研发出…

[openGL] 高级光照-Gamma矫正

目录 一 Gamma是什么? 二 感知光度和物理光度 2.1 与Gamma的关系 2.3 存在问题和弊端? 三 Gamma矫正(逆Gamma) 3.1 Gamma矫正的两种方法 3.2 sRGB空间 3.3 重复校正 3.3.1 在着色器中处理重复校正 3.3.2 在加载纹理时就重复校正 3.3.3 校正前后效果 本章节Qt源码点…

基于python的二手房数据分析建模及可视化研究,爬取链家二手房数据,可视化分析,房价预测模型

介绍 主要涉及通过爬取济南市链家二手房数据&#xff0c;然后对数据进行处理&#xff0c;包括缺省值处理&#xff0c;高德地图获取二手房地址所属市区&#xff0c;经纬度等数据处理。然后通过python的flask框架编写后端接口&#xff0c;把数据响应给前端。然后前端通过AJAX请求…

AI决策与专家决策,您更喜欢哪种决策方式?

HI&#xff0c;我是AI智能小助手CoCo。 CoCode开发云智能助手CoCo “大家好&#xff0c;我是CoCode开发云的AI智能小助手CoCo&#xff0c;现在为大家播放关于CoCode开发云AI大家庭的最新消息&#xff1a; 欢迎AI家庭新成员&#xff1a;AI自动决策”。 AI自动决策发布 CoCode开…

信息系统安全,陈萍,王金双习题

第一章 填空题 机密性、完整性、可用性设备安全、数据安全、内容安全、行为安全通信保密、信息安全、信息安全保障保护、检测、响应、恢复健康、法律法规网络和通信协议的脆弱性、信息系统的缺陷、黑客的恶意攻击稳定性、可靠性、可用性硬件和软件的底层整体性、分层性、最小…

Zabbix监控Windows

1.在虚拟机中安装zabbix 安装系统一直托不进虚拟机中&#xff1b;因为没安装Tools组件 点击虚拟机&#xff0c;选择安装VMware Tools 2.配置zabbix

SpringBoot之JWT令牌校验

SpringBoot之JWT令牌校验 本文根据黑马b站springboot3vue3课程 JWT &#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在不同实体之间安全地传输信息。它由三个部分组成&#xff1a;头部&#xff08;Header&#xff09;…

dnspy逆向和de4dot脱壳

拿到一个软件&#xff0c;使用dnspy查看&#xff0c;发现反汇编后关键部分的函数名和代码有很多乱码&#xff1a; 这样的函数非常多&#xff0c;要想进一步调试和逆向&#xff0c;就只能在dnspy中看反汇编代码了&#xff0c;而无法看到c#代码&#xff0c;当时的整个逆向过程只剩…

程序,进程,进程管理的相关命令

程序 程序是执行特定任务的代码 1.是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 2.用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 进程的状态 为了对进程进行管理&#xff0c;操作系统首先定义…

【GDB调试技巧】提高gdb的调试效率

目录 &#x1f31e;gdb的启动 &#x1f31e;gdb技巧 &#x1f33c;1. gdb小技巧汇总 &#x1f33c;2. 打印输出指定地址的值 &#x1f33c;3. 查看当前执行到哪行代码代码内容 3.1 方式一&#xff1a;info line 结合 list 。 3.2 方式二&#xff1a;f 3.3 方式三&#…

算法与数据结构要点速学——排序算法

排序算法 所有主要的编程语言都有一个内置的排序方法。假设并说排序成本为 O(n*log n)&#xff0c;通常是正确的&#xff0c;其中 n 是要排序的元素数。为了完整起见&#xff0c;这里有一个图表&#xff0c;列出了许多常见的排序算法及其完整性。编程语言实现的算法各不相同&a…