.Net Core 3.1浏览器后端服务(三) Swagger引入与应用
一、前言
前后端分离的软件开发方式已逐步成为互联网项目开发的业界标准,前后端分离带来了诸多好处的同时,也带来了一些弊端。
接口文档的维护就是其中之一,起初前后端约定文档规范,开发的很愉快,随着时间推移、版本迭代、接口更改,接口文档维护越来越麻烦。
相信很多前端开发者(请求方)都遇到过实际请求与接口文档不一致的问题


什么是Swagger?
Swagger是一个强大的接口文档自动生成工具。
二、引入Swagger包
在Package Manager Console输入如下命令
Install-Package Swashbuckle.AspNetCore -Version 6.0.7

或者在MWebAPI项目右键


选择最新版本Install,安装完成后添加Swagger服务注入及中间件配置
在Startup类的ConfigureServices方法中添加服务注入:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {Title = "Net Core API", Version = "v1"});
});
在Startup类的Configure方法中配置Swagger相关中间件:
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Net Core API");
});
F5运行项目

咦,Swagger文档并未展示,这是由于默认启动url未更改
修改launchSetting.json文件中launchUrl如下:

再次F5运行

预想的SwaggerUI展示出来了
三、添加注释
1、首先添加文档说明及作者信息
修改Swagger服务注入部分
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Net Core API",
Version = "v1",
Description = "A simple DotNet core web API sample program",
Contact = new OpenApiContact
{
Name = "Sirius",
Email = "1247830052@qq.com",
Url = new Uri("https://www.cnblogs.com/mchao/"),
Extensions = null,
},
License = new OpenApiLicense
{
Name = "免费许可",
Url = new Uri("https://www.cnblogs.com/mchao/"),
Extensions = null,
}
});
});
运行如下:

2、添加生成Controller的注释说明
MWebAPI项目右键->properties->build->output

build项目会生成Controller.xml文件及内容(自动创建更新,无需手动维护)

接着在AddSwaggerGen方法中添加文档路径
services.AddSwaggerGen(c =>
{var xmlPath = Path.Combine(AppContext.BaseDirectory, "Controller.xml");
c.IncludeXmlComments(xmlPath, true);
});
运行如下:

3、添加返回数据的注释说明
MDto项目右键->properties->build->output

接着在AddSwaggerGen方法中添加文档路径
services.AddSwaggerGen(c =>
{
var xmlDtoPath = Path.Combine(AppContext.BaseDirectory, "Dto.xml");
c.IncludeXmlComments(xmlDtoPath, true);
});
运行

这里有个异常,找不到Dto.xml,目前是这样处理的,Dto.xml文件属性 Copy to Outup Direcotry,如哪位道友有其他方案请告知。。。

再次运行

可看到Dto的注释信息
四、Api分组
1、增加分组
在Startup类的ConfigureServices方法中增加doc分组:
c.SwaggerDoc("V2", new OpenApiInfo
{
Title = "Net Core API V2",
Version = "V2",
Description = "A simple DotNet core web API sample program2",
});
在Startup类的Configure方法中增加v2 json路径
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/V1/swagger.json", "API V1");
c.SwaggerEndpoint("/swagger/V2/swagger.json", "API V2");
});
2、配置分组
给UserInfoController配置V1组
[ApiExplorerSettings(GroupName = "V1")]
public class UserInfoController : Controller
给HomeController配置V2组
[ApiExplorerSettings(GroupName = "V2")]
public class HomeController : Controller
运行:

五、结语
Swagger还有很多好用功能,比如自定义Swagger模板、Swagger开启权限验证等,希望感兴趣的道友继续探索!!!
.Net Core 3.1浏览器后端服务(三) Swagger引入与应用的更多相关文章
- .Net Core 3.1浏览器后端服务(一) Web API项目搭建
一.前言 基于CefSharp开发的浏览器项目已有一段时间,考虑到后期数据维护需要Server端来管理,故开启新篇章搭建浏览器后端服务.该项目前期以梳理服务端知识为主,后期将配合CefSharp浏览器 ...
- .Net Core 3.1浏览器后端服务(五) 引入定时任务Quartz.Net
一.前言 近期项目中遇到一些需求,需要定时写入数据库,定时刷新缓存的问题,因此需要引入任务调度机制. 我的选择是使用 Quartz.Net,使用的版本是 3.2.4 这里强调一点:3.x的版本与2.x ...
- .Net Core 3.1浏览器后端服务(四) 你眼中的依赖注入与我相同吗?
一.前言 DI-Dependency Injection 依赖注入 IoC-Inversion of Control 控制反转 近几年这依赖注入. 控制反转已成为软件开发中不可或缺的一部分,那么该怎么 ...
- Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
服务端配置 Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置. Silo配置有几个关键方面: Orleans集群信息 集群提供程序(不知道咋翻译) Silo到Silo和Cl ...
- uni-app + Cloudbase——uni-app 项目中如何使用腾讯云开发后端服务
1 基本介绍 uni-app 是一个基于 Vue.js 的跨端开发框架,一套代码可以发布到 App.小程序.Web 等不同平台 腾讯云开发平台 Cloudbase 提供的 @cloudbase/js- ...
- 容易被忽视的后端服务 chunked 性能问题
容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 spring boot 创建的默认 spring mvc 项目 集成 ...
- 快速新建简单的koa2后端服务
既然前端工程化是基于NodeJS,那么选择NodeJs做前后端分离部署也是理所应当的.其实只需要实现静态资源和代理的话,用nginx才是最好的选择,用NodeJS是为了日后能进一步在服务端上实现自动构 ...
- vue,vuex的后台管理项目架子structure-admin,后端服务nodejs
之前写过一篇vue初始化项目,构建vuex的后台管理项目架子,这个structure-admin-web所拥有的功能 接下来,针对structure-admin-web的不足,进行了补充,开发了具有登 ...
- 浏览器与服务端请求响应流程与HTTP协议
浏览器与服务端请求响应流程图: 1.HTTP概要 1.1. 定义 HTTP(HyperText Transfer Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种 ...
随机推荐
- Box Model 盒子模型
Box Model盒子模型,是初学者在学习HTMl5时会学到的一个重要的模型,也有一些人称它为框模型,因为盒子是属于3维,而框是平面的.称之为盒子模型,是因为其结构和盒子十分相似,其最外面是margi ...
- Scala-文件操作
Scala-文件操作 一.遍历一个文件中的每一行 方法一: 使用Source.getLines返回的迭代器 方法二: 将Source.getLines返回的迭代器,转换成数组 方法三: 调用Sourc ...
- OSPF总结
参考文档:OSPF知识点总结(华为)https://wenku.baidu.com/view/8cc8ab52a36925c52cc58bd63186bceb19e8edf6.html OSPF概念 ...
- CCF CSP 202012-1 期末预测之安全指数
202012-1 期末预测之安全指数 题目背景 期末要到了,小菜同学找到了自己的好朋友顿顿,希望可以预测一下自己这学期是否会挂科. 题目描述 首先,顿顿选取了如"课堂表现".&qu ...
- TypeScript中 typeof ArrayInstance[number] 剖析
假设这样一个场景,目前业务上仅对接了三方支付 'Alipay', 'Wxpay', 'PayPal', 实际业务 getPaymentMode 会根据不同支付方式进行不同的付款/结算流程. const ...
- 树与图的DFS与BFS
树的DFS 题目:https://www.acwing.com/problem/content/848/ 代码 #include<bits/stdc++.h> using namespac ...
- 牛客小白月赛28 D.位运算之谜 (位运算)
题意:给你两个正整数\(x\)和\(y\),求两个正整数\(a\),\(b\),使得\(a+b=x\),\(a\)&\(b\)=\(y\),如果\(a\),\(b\),输出\(a\ xor \ ...
- Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...
- Docker配置文件deamon.json详解
vim /etc/docker/daemon.json { "authorization-plugins": [], "data-root": "&q ...
- js的变量,作用域,内存
一,基本类型和引用类型的值基本类型的值是按值访问的,引用类型的值是保存在内存中的对象1,动态的属性 只有引用类型的值可以添加属性方法 不能给基本类型添加属性和方法2,复制变量值 复制基本类型的值,两个 ...