Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【 .NET Core 3.0 】框架之三 || swagger的使用

【 .NET Core 3.0 】框架之三 || swagger的使用

作者头像
老张的哲学
发布于 2022-04-10 03:05:26
发布于 2022-04-10 03:05:26
96100
代码可运行
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始
运行总次数:0
代码可运行

一、为什么使用Swagger

上文中已经说到,单纯的项目接口在前后端开发人员使用是特别不舒服的,那所有要推荐一个,既方便又美观的接口文档说明框架,当当当,就是Swagger,随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。

前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。

没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,有在confluence上写的,有在对应的项目目录下readme.md上写的,每个公司都有每个公司的玩法,无所谓好坏。

书写API文档的工具有很多,但是能称之为“框架”的,估计也只有swagger了。

二、配置Swagger服务

1、引用Nuget包

下面开始引入swagger插件

方法有两个:

1)可以去swagger官网或github上下载源码,然后将源码(一个类库)引入自己的项目;

2)直接利用NuGet包添加程序集应用(这里就是前边说的 在以后的开发中,Nuget无处不在)。

右键项目中的 Dependencies -- > Manage Nuget Packags --> Browse --> Search "Swashbuckle.AspNetCore" --> Install 5.0以上版本 这里注意下,要勾选上 包含预览版 ,如果不勾选,只能看到4.0版本,毕竟5.0还没有正式发布。

然后就在项目的Nuget依赖包 Packages 里看到刚刚引入的Swagger包

这个时候,你可以试运行一下,当然是不可以的,因为我们还没有配置。

2、配置服务

打开Startup.cs类,编辑 ConfigureServices 类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public string ApiName { get; set; } = "Blog.Core";

 var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;
 services.AddSwaggerGen(c =>
 {
     c.SwaggerDoc("V1", new OpenApiInfo
     {
         // {ApiName} 定义成全局变量,方便修改
         Version = "V1",
         Title = $"{ApiName} 接口文档——Netcore 3.0",
         Description = $"{ApiName} HTTP API V1",
         Contact = new OpenApiContact { Name = ApiName, Email = "Blog.Core@xxx.com", Url = new Uri("https://www.jianshu.com/u/94102b59cc2a") },
         License = new OpenApiLicense { Name = ApiName, Url = new Uri("https://www.jianshu.com/u/94102b59cc2a") }
     });
     c.OrderActionsBy(o => o.RelativePath);


 });

3、启动Http中间件

编辑Configure类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }
     app.UseSwagger();
     app.UseSwaggerUI(c =>
     {
         c.SwaggerEndpoint($"/swagger/V1/swagger.json", $"{ApiName} V1");

         //路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.RoutePrefix = "doc";
         c.RoutePrefix = ""; 
     });


     app.UseRouting();

     app.UseAuthorization();

     app.UseEndpoints(endpoints =>
     {
         endpoints.MapControllers();
     });
 }

4、查看效果

到这,已经完成swagger的添加,F5 运行调试,因为我们在上边配置swagger中间件的时候,把启动地址设置了空,就是这里

所以这个时候,我们是直接访问域名根目录就行了,比如 localhost://8081即可。

还有一个小问题就是,因为我们的项目,官方默认的是 /WeatherForecast地址,所以我们需要修改一下,在 launchSettings.json 文件中的 launchUrl设置为空,或者删掉就行。

这个时候我们直接访问项目根目录,当当当出来了:

5、好像少点儿什么?!

在上边的截图中,我们可以看到,已经生成了一个 api 列表,我们不仅可以清晰的看到项目中含有那些接口,还可以直接点击发送请求,类似 postman 那样,做接口调试,

但是现在有两个问题:

1、这个接口文档现在还不多,如果多了的话,每个接口对应的意义可能会混淆, 2、另外,这个接口文档,也是方便前端工程师查看的,目前这个这个样式,看起来是挺费解的。

这个时候,要是有一个注释功能就很好了,别着急,看看下边的截图,是不是你想要的效果?!

既美观又快捷,而且还有丰富的注释,这样以后发布出去,前后端开发人员就可以一起开发了,嗯!不错!

那这个注释功能,应该这么做呢?别着急马上开始。

三、swagger文档完善

1、为接口添加注释

接下来,我们就需要解决第二个问题,如何增加文字说明,就是传说中的注释:

右键项目名称=>属性=>生成,勾选“输出”下面的“xml文档文件”,系统会默认生成一个,当然老规矩,你也可以自己起一个名字:

这里我用的是相对路径,可以直接生成到 api 层的 bin文件夹下

这个时候,先别忙着运行项目,作为老司机的我,只要是改代码或者配置文件,保存后,第一件事就是看看有没有错误,一看,咦~~~果然,虽然是警告,可以强迫症呀,一看还挺多

别慌!一看,哦!原来是swagger把一些接口方法都通过xml文件配置了,就是刚刚上文提到的,所以我们只需要加上方法注释就可以辣,可以左斜杠/,连续三下即控制器也可加注释

如果你不想每一个方法都这么加注释,可以这么配置(对当前项目进行配置,可以忽略警告,记得在后边加上分号 ;1591):

现在呢,配置好了xml文件,接下来需要让系统启动的时候,去读取这个文件了,重新编辑Startup.cs,修改ConfigureServices函数,注意配置的参数 true:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;
 services.AddSwaggerGen(c =>
 {
     c.SwaggerDoc("V1", new OpenApiInfo
     {
         // {ApiName} 定义成全局变量,方便修改
         Version = "V1",
         Title = $"{ApiName} 接口文档——Netcore 3.0",
         Description = $"{ApiName} HTTP API V1",
         Contact = new OpenApiContact { Name = ApiName, Email = "Blog.Core@xxx.com", Url = new Uri("https://www.jianshu.com/u/94102b59cc2a") },
         License = new OpenApiLicense { Name = ApiName, Url = new Uri("https://www.jianshu.com/u/94102b59cc2a") }
     });
     c.OrderActionsBy(o => o.RelativePath);


     //就是这里!!!!!!!!!
     var xmlPath = Path.Combine(basePath, "blog.core.test3.0.xml");//这个就是刚刚配置的xml文件名
     c.IncludeXmlComments(xmlPath, true);//默认的第二个参数是false,这个是controller的注释,记得修改


 });

然后F5 运行,都加上了,感觉前端大佬再也不会说看不懂接口了,哈哈哈哈

3、对 Model 也添加注释说明

接下来开始第三个问题:添加实体类说明注释:

注意下:这里的model层,是我的 Blog.Core 项目的代码,大家看看意思就行,自己动手操作下很简单。

新建一个.net core 类库Blog.Core.Model,注意是 .net core的类库,或者使用标准库也是可以的!(标准库可以在 NetCore 和 Framework 两个项目都可以跑)

新建一个Love的实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <summary>
    /// 这是爱
    /// </summary>
    public class Love
    {
        /// <summary>
        /// id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
    }

这里现在有两个情况,或者说是两个操作方案:

1、当前 api 层直接引用了 Blog.Core.Model 层;

这个时候,我们只需要配置仿照上边 api 层配置的xml文档那样,在 Blog.Core.Model 层的 XML 输出到 API 层就行了:

2、API 层没有直接引用 Model 层,而是通过级联的形式;

就比如我的 Github 上的代码那样:

效果和上边是一样的,也算是引用 Model 层了。

4、改写注入方法,并在控制器中参数引用

配置xml文档,在 startup.cs 的 configureService 方法里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //就是这里
    var xmlPath = Path.Combine(basePath, "Blog.Core.xml");//这个就是刚刚配置的xml文件名
    c.IncludeXmlComments(xmlPath, true);//默认的第二个参数是false,这个是controller的注释,记得修改

    var xmlModelPath = Path.Combine(basePath, "Blog.Core.Model.xml");//这个就是Model层的xml文件名
    c.IncludeXmlComments(xmlModelPath);

接口添加注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     /// <summary>
       /// post
       /// </summary>
       /// <param name="love">model实体类参数</param>
        [HttpPost]
        public void Post(Love love)
        {
        }

dang dang dang,就出来了

5、去掉Swagger警告提示

在Model层中,我们建立了很多实体,如果你没有为每一个实体都添加注释的话,可能会出现这样的警告:

如果有的小伙伴,不想添加注释,而又不想看到这个强迫症的警告提示,那就可以这么做,

右键项目 属性 -》 Errors and warnings 配置 1591:

6、隐藏某些接口

如果不想显示某些接口,直接在controller 上,或者action 上,增加特性

[ApiExplorerSettings(IgnoreApi = true)]

或者直接对这个方法 private,也可以直接使用obsolete属性

四、Github && Gitee

https://github.com/anjoy8/Blog.Core.git

https://gitee.com/laozhangIsPhi/Blog.Core

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.net core项目实战之基于Restful API+Swagger项目搭建
然后右击你的项目,在属性中,勾选下生成XML文档文件,Swagger会自动解析对应的XML进行匹配。
Bug生活2048
2018/08/31
6040
.net core项目实战之基于Restful API+Swagger项目搭建
ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
将 Swagger 生成器添加到 Startup.ConfigureServices 方法中的服务集合中:
依乐祝
2018/09/18
3.4K0
ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
从壹开始学习NetCore 44 ║ 最全的 netcore 3.0 升级实战方案
正文 缘起 1、哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程《系列一、NetCore 视频教程(Blog.Core)》也已经录制八期了,还在每周末同步更新中,欢迎
梁规晓
2019/09/24
1.1K0
从壹开始学习NetCore 44 ║ 最全的 netcore 3.0 升级实战方案
从壹开始前后端分离【 .NET Core2.2 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
  说接上文,上回说到了《八 || API项目整体搭建 6.3 异步泛型+依赖注入初探》,后来的标题中,我把仓储两个字给去掉了,因为好像大家对这个模式很有不同的看法,嗯~可能还是我学艺不精,没有说到其中的好处,现在在学DDD领域驱动设计相关资料,有了好的灵感再给大家分享吧。
老张的哲学
2022/04/10
8980
从壹开始前后端分离【 .NET Core2.2 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
从壹开始学习NetCore 44 ║ 最全的 netcore 3.0 升级实战方案
缘起 1、哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程《系列一、NetCore 视频教程(Blog.Core)》也已经录制八期了,还在每周末同步更新中,欢迎大家多多指教。 2、除此之外呢,我也在平时的时间帮朋友开发了一个小项目,就是使用 .net mvc+vue+ele+mongo 框架写的项目,之前一直想着用mvc结合着vue写,这次也终于上手了,不过是一个小的demo,因为是朋友的项目,所以就不开源了。 言归正传,👉 从2018年8月就开始听说 netcore 要
老张的哲学
2022/04/10
8840
从壹开始学习NetCore 44 ║ 最全的 netcore 3.0 升级实战方案
webapi文档描述-swagger
用户1168362
2018/01/05
1.8K0
webapi文档描述-swagger
Asp.net core Swashbuckle Swagger 的常用配置
  .net core Swashbuckle Swagger 官方文档:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
乔达摩@嘿
2021/07/13
1.7K0
ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4开发的授权中心用于对Api资源的保护。问题来了,我们的Api用了SwaggerUI做接口的自文档,那就蛋疼了,你接入了IdentityServer4的Api,用SwaggerUI调试、调用接口的话,妥妥的401,未授权啊。那有小伙伴就会说了,你SwaggerUI的Api不经过网关不就ok了?诶,好办法。但是:
乔达摩@嘿
2020/09/11
1.6K0
ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档
开局一张图,然后开始编,一些基本的asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore的几个使用要点进行描述。
易墨
2018/09/14
2K0
asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档
DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)
前面我们花了14篇的文章来给大家介绍经典DDD的概念、架构和实践。这篇文章我们来做一个完整的总结,另外生成一个Api接口文档。 一.DDD解决传统的开发的几大问题: 没有描述需求的设计模型;而是直接通过数据库表的方式体现,也就是需求与设计是脱节的。 编码的架构也没有与设计和需求对应起来。 业务逻辑与技术混在一起;业务逻辑可能直接调用的数据访问,这样把业务逻辑与数据访问的技术混在一起。 开发没有层次感和节奏感;系统没有一个统一的约束,开发人员没有一个统一的节奏,这主要体现在随意的编码。 Bug 定位困难:当系
用户1910585
2018/07/04
1.1K0
ASP.NET WebAPI 测试文档 (Swagger)
SwaggerUI是一个简单的Restful API测试和文档工具。简单、漂亮、易用(官方demo)。通过读取JSON配置显示API .项目本身仅仅也只依赖一些html,css,js静态文件.你可以几乎放在任何Web容器上使用
HueiFeng
2020/02/12
1.8K0
【swagger】C# 中 swagger 的使用及避坑
开发 web api 的时候,写文档是个痛苦的事情,而没有文档别人就不知道怎么调用,所以又不得不写。
丹枫无迹
2020/04/08
7.4K0
【swagger】C# 中 swagger 的使用及避坑
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成
  Swagger是一个规范且完整API文档管理框架,可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
追逐时光者
2023/01/05
1.3K0
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成
Core + Vue 后台管理基础框架8——Swagger文档
  作为前后端分离的项目,或者说但凡涉及到对外服务的后端,一个自描述,跟代码实时同步的文档是极其重要的。说到这儿,想起了几年前在XX速运,每天写完代码,还要给APP团队更新文档的惨痛经历。给人家普及swagger,说不习惯,就要手写的Word文档。
guokun
2020/09/03
6170
Core + Vue 后台管理基础框架8——Swagger文档
【 .NET Core 3.0 】框架之五 || JWT权限验证
这里一共三个文章,目前是第一篇,剩下两篇主要是在博客园,大家点击阅读原文,自行查看就行。
老张的哲学
2022/04/10
2.2K0
【 .NET Core 3.0 】框架之五 || JWT权限验证
【愚公系列】2023年02月 WMS智能仓储系统-007.Swagger接口文档的配置
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
愚公搬代码
2023/03/16
9610
【愚公系列】2023年02月 WMS智能仓储系统-007.Swagger接口文档的配置
.NET Core Redis的简单使用
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
GoodTime
2024/03/05
2620
.NET Core Redis的简单使用
.Net Core微服务入门全纪录(完结)——Ocelot与Swagger
上一篇【.Net Core微服务入门全纪录(八)——Docker Compose与容器网络】完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指令即可在docker中运行整个复杂的环境。本篇简单介绍一下Ocelot与Swagger的集成,方便在网关项目中统一查看各个服务的api文档。
xhznl
2020/08/14
2.9K1
Swashbuckle.AspNetCore3.0的二次封装与使用
之前写过一篇Swashbuckle.AspNetCore-v1.10 的使用,现在 Swashbuckle.AspNetCore 已经升级到 3.0 了,正好开新坑(博客重构)重新封装了下,将所有相关的一些东西抽取到单独的类库中,尽可能的避免和项目耦合,使其能够在其他项目也能够快速使用。
易墨
2018/10/10
9500
net5 webapi中 SwaggerUI如何进行版本控制
在需要进行版本控制的控制器添加版本  [ApiExplorerSettings(GroupName = "V?")]   [Route("api/V?/[controller]")]
明志德道
2023/10/21
3460
net5 webapi中  SwaggerUI如何进行版本控制
推荐阅读
相关推荐
.net core项目实战之基于Restful API+Swagger项目搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验