首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

.net core8 使用Swagger(附当前源码)

编程知识
2024年09月12日 15:20

说明

   该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。

    该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。

    说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。

有兴趣的朋友,请关注我吧(*^▽^*)。

使用前提

1、Visual Studio使用2022版本

搭建项目

    OverallAuth2.0依然和OverallAuth1.0一样,采用前后端分离模式,所以搭建后端,我们选择  .net core web api(如下图)

 

    选择项目模板后,我们点击【下一步】

 

选择.net 8.0(最新长期支持版本),随后创建项目

默认项目结构如下图

 

直接运行,查看默认界面

 

    运行起来可以看到,系统默认的swagger界面非常简介,也少了很多信息比如:

1、系统说明、版本、作者等。

2、接口的描述、参数等信息。

3、接口的分类等。

优化Swagger

    上面说道,系统默认的接口文档是非常简洁的,接下来我们在系统中,这样做,让swagger看起来更优美和专业。

 在项目下新增一个文件件PlugInUnit,然后再该文件夹下新建一个类SwaggerPlugInUnit

      建好SwaggerPlugInUnit后,在webapi同级建一个类库Utility,用于存放系统的辅助工具等,然后再该类库下建一个Enum文件夹,并新建ModeuleGroupEnum该枚举。

如图:

 

建好文件后,在ModeuleGroupEnum文件中写一个枚举SysMenu,并保存。
/// <summary>
/// 模块分组
/// </summary>
public enum ModeuleGroupEnum
{
    SysMenu = 1,
}

随后在SwaggerPlugInUnit中编写一个方法,具体代码如下

/// <summary>
/// swagger插件
/// </summary>
public static class SwaggerPlugInUnit
{
    /// <summary>
    /// 初始化Swagger
    /// </summary>
    /// <param name="services"></param>
    public static void InitSwagger(this IServiceCollection services)
    {
        //添加swagger
        services.AddSwaggerGen(optinos =>
        {
            typeof(ModeuleGroupEnum).GetEnumNames().ToList().ForEach(version =>
            {
                optinos.SwaggerDoc(version, new OpenApiInfo()
                {
                    Title = "权限管理系统",
                    Version = "V2.0",
                    Description = "求关注,求一键三连",
                    Contact = new OpenApiContact { Name = "微信公众号作者:不只是码农   b站作者:我不是码农呢", Url = new Uri("http://www.baidu.com") }
                });

            });

            //反射获取接口及方法描述
            var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
            optinos.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFileName), true);

        });
    }

    /// <summary>
    /// swagger加入路由和管道
    /// </summary>
    /// <param name="app"></param>
    public static void InitSwagger(this WebApplication app)
    {
        app.UseSwagger();
        app.UseSwaggerUI(options =>
        {
            typeof(ModeuleGroupEnum).GetEnumNames().ToList().ForEach(versoin =>
            {
                options.SwaggerEndpoint($"/swagger/{versoin}/swagger.json", $"接口分类{versoin}");
            });
        });
    }
}
然后再program中使用自定义swagger中间件

   做好以上步骤,我们的swagger基本算是搭建好了,只需要在控制器上方,添加路由和分组。

 /// <summary>
 /// 系统模块
 /// </summary>
 [ApiController]
 [Route("api/[controller]/[action]")]
 [ApiExplorerSettings(GroupName = nameof(ModeuleGroupEnum.SysMenu))]

 

做完以上这些,我们对swagger就算优化完成,只需要运行系统,就可以查看效果

 

注意:必须生成接口的xml文件,不然会报错。

 

  好了,以上就是搭建WebApi+优化Swagger的全部过程,你快来试试吧

如果对你有帮助,请关注我吧(*^▽^*)。

源代码地址:https://gitee.com/yangguangchenjie/overall-auth2.0-web-api  

帮我Star,谢谢。

 

有兴趣的朋友,请关注我吧(*^▽^*)。

关注我:一个全栈多端的宝藏博主,定时分享技术文章,不定时分享开源项目。关注我,带你认识不一样的程序世界

From:https://www.cnblogs.com/cyzf/p/18410483
本文地址: http://www.shuzixingkong.net/article/1949
0评论
提交 加载更多评论
其他文章 掌握 C++17:结构化绑定与拷贝消除的妙用
C++17 特性示例 1. 结构化绑定(Structured Binding) 结构化绑定允许你用一个对象的元素或成员同时实例化多个实体。 结构化绑定允许你在声明变量的同时解构一个复合类型的数据结构(如 结构体,std::tuple, std::pair, 或者 std::array)。这样可以方便
浅谈 C# 中的顶级语句
前言 在C# 9版本中引入了一项新特性:顶级语句,这一特性允许在不显式定义 Main 方法的情况下直接编写代码。 传统的写法 namespace&#160;TestStatements{ internal&#160;class&#160;Program { static&#160;void&#160
浅谈 C# 中的顶级语句 浅谈 C# 中的顶级语句
AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析
本篇文章的主要目的是为大家提供实现思路,以及如何更好地开发一个助手,而不仅仅是简单地进行拆解。如果采取拆解的方式,一篇文章可能会长达2万+字,还需要配以数十张图片,这将会非常繁琐。因此,针对拆解的详细内容,我计划单独制作一期视频,以帮助大家更清晰地理解。感谢大家对小雨的关注与支持。
AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析 AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析 AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析
006.MinIO基础使用
图形界面基础使用 bucket bucket创建 图形界面创建bucket。 特性: Versioning 开启版本控制,开启版本控制则允许在同一键下保持同一对象的多个版本。 Object Locking 对象锁定防止对象被删除,需要支持保留和合法持有,只能在创建桶时启用。 Quita 配额限制bu
006.MinIO基础使用 006.MinIO基础使用 006.MinIO基础使用
架构师备考的一些思考(三)
前言 这个考题的大部分内容,我感觉都是我们会的,但所有的考题都穿上了马甲,穿上马甲我们就不好认了,而且如果是一个两个人穿马甲,还好推断,如果1000人穿马甲,你识别的概率就会急速下降。 有些题的内容则是即无法识别,也无法背,因为它也没有个前因后果,完全是出题人拍脑袋想的,所以,这种题我们是无法通过知
架构师备考的一些思考(三)
面试官:说说停止线程池的执行流程?
对于我们使用的线程池 ThreadPoolExecutor 来说,停止线程池的方法有以下两个: shutdown():优雅的关闭线程池,即不再接受新任务,但会等待已提交任务(包括正在执行的任务和在队列中等待的任务)执行完毕。等待所有任务都执行完毕后,线程池才会进入终止状态。 shutdownNow(
面试官:说说停止线程池的执行流程? 面试官:说说停止线程池的执行流程? 面试官:说说停止线程池的执行流程?
SpringCloud入门(二)服务间调用和案例
一、微服务拆分注意事项微服务拆分注意事项:1.单一职责:不同微服务,不要重复开发相同业务2.数据独立:不要访问其它微服务的数据库3.面向服务:将自己的业务暴露为接口,供其它微服务调用 1.微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务2.微服务可以将业务暴露为接口,供其它微服务使用3
SpringCloud入门(二)服务间调用和案例 SpringCloud入门(二)服务间调用和案例
【解题报告】P8478 「GLR-R3」清明
P8478 「GLR-R3」清明 参考了出题人题解和 xcyyyyyy 大神的题解,强推前两篇。 拿到题完全没思路怎么办??? 人类智慧的巅峰,思维量的登峰造极。 换句话说就是非人题目,不过不得不说 GLR 的题是真的好,难度也是真的高。 首先我们需要看懂题面,这是第一个难点。 题面大意如下: 对于
【解题报告】P8478 「GLR-R3」清明