介绍

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。日常可以用于后端开发人员测试接口或者前后端联调使用。从.net5开始,swagger已经集成到vs2019编译器中,可以通过勾对选项“启用OpenAPI支持”显示基本的swagger配置。

本文示例环境:vs2019、net5

1 基本使用

新建一个NetCore API项目,为了测试效果,我多创建几个控制器

image.png

1.1 安装组件

  <ItemGroup><PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /></ItemGroup>

1.2 注册swagger服务

在ConfigureServices中

        public void ConfigureServices(IServiceCollection services){services.AddControllers();services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" });});}

注意:

//netcore3.0之前版本用法

c.SwaggerDoc("v1", new Info { Title = "WebApi", Version = "v1" });

1.3 使用Swagger

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi v1"));}app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

该示例代码配置的swagger只在Development环境下显示,可以根据实际情况来修改

1.4 启动

运行项目,展示下面的效果

image.png

如果这是你写的接口,这个时候你的其他同事去看,真的会一脸懵逼,你这写的都是啥玩意,那么我们来给这加上注释吧。

    /// <summary>/// 用户控制器/// </summary>[Route("api/[controller]")][ApiController]public class UserController : ControllerBase{/// <summary>///查询用户列表/// </summary>/// <returns></returns>[HttpGet]public IEnumerable<string> Get(){return new string[] { "value1", "value2" };}/// <summary>/// 查询用户详情/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpGet("{id}")]public string Get(int id){return "value";}/// <summary>/// 删除用户/// </summary>/// <param name="id"></param>[HttpDelete("{id}")]public void Delete(int id){}}

这样子加了注释还不行,swagger还读取不到我们的注释,我们还需要生成xml文档并且让swagger使用,选中项目右键属性=>生成=>xml文档文件

image.png

修改注入swagger配置

            services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" });// 使用反射获取xml文件。并构造出文件的路径var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);// 启用xml注释.第二个参数启用控制器的注释,默认为false.c.IncludeXmlComments(xmlPath, true);});

再次启动项目查看界面

image.png

至此,基础的配置swagger显示注释已经实现了,那么如何调用我们接口那?

image.png

通过该界面,我们可以看到请求地址、请求方式、入参类型、输出参数等。

注:

通过设置取消显示警告:1591 , 可以去除方法和类上面的xml注释警告

如果实体类不在当前程序集下,需要同样方式配置实体类程序集的xml文档到swagger配置

2. swagger传递JWT

jwt是一个基于json的、用于在网络上声明某种主张的令牌,通常是用三部分组成:头信息,消息体,签名。他是一种双方之间传递安全信息的表述性声明规范。可以做权限验证的工具,但是目的不是为了数据加密和保护。虽然看似像是加密的数据,但是它并没有加密,不适合存储机密信息。

如果我们接口是需要传递token才可以访问,那么我们就需要对我们的swagger配置再进行改造

            services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo {Title = "WebApi", Version = "v1"});// 使用反射获取xml文件。并构造出文件的路径var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);// 启用xml注释.第二个参数启用控制器的注释,默认为false.c.IncludeXmlComments(xmlPath, true);var security = new Dictionary<string, IEnumerable<string>> {{"Bearer", new string[] { }}};c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme(){Description = "JWT授权(数据将在请求头中进行传输) 在下方输入Bearer {token} 即可,注意两者之间有空格",Name = "Authorization", //jwt默认的参数名称In = ParameterLocation.Header, //jwt默认存放Authorization信息的位置(请求头中)Type = SecuritySchemeType.ApiKey,});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference(){Id = "Bearer",Type = ReferenceType.SecurityScheme}},Array.Empty<string>()}});});

运行,查看界面,发现界面有所不同

image.png

虽然我手上没有token,但是我也没有写校验token的代码,所以我们就暂且看为一个头部传递的工具使用。jwt具体使用后续再讲。

token传递方式就是在Headers增加  Authorization:Bearer {token}  ,然后需要在程序中配置校验token,当下我们只是模拟swagger在header中传递值。

在输入框输出:Bearer AABBCC

在Action中获取我们传输的数据

var token = HttpContext.Request.Headers["Authorization"];

image.png

3 参考文档

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-5.0

关于swagger的使用操作还有很多,上面有些配置也没有详细说到,只说了一些功能性的操作。更详细操作需要自行学习。

.Net之Swagger基础使用相关推荐

  1. 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)

    概述 首先让我引用 Swagger 官方的介绍: Design is the foundation of your API development. Swagger makes API design ...

  2. Day14(springboot与mybatis整合、mybatis自动代码生成、swagger、thymeleaf、lombok环境配置、mybatisPlus介绍(自动代码生成))

    srpingboot和mybatis整合 springbootSSM项目下载地址 链接:https://pan.baidu.com/s/11fwh1C7ZOg3jQVlXl2DJjQ 提取码:83yt ...

  3. GitHub轻松阅读微服务实战项目流程详解【第四天:账户服务的设计与实现】

    Four Day 1.配置文件精解 (1)boootstrap.yml (2)配置中心的yml文件 2.Config (1)书架线程池配置 (2)Mybatis及其Swagger配置 (3)Redis ...

  4. 接口管理平台YApi

    介绍 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发 ...

  5. springBoot+mybatisPlus小demo

    项目介绍:采用restful api进行接口规范 / 项目框架SpringBoot+mybatis Plus / 采用mysql进行数据存储 / 采用swaggerUI进行前后端业务分离式开发. 开发 ...

  6. 品达通用权限系统(Day 1~Day 2)

    1. 项目概述 1.1 项目介绍 对于企业中的项目绝大多数都需要进行用户权限管理.认证.鉴权.加密.解密.XSS防跨站攻击等.这些功能整体实现思路基本一致,但是大部分项目都需要实现一次,这无形中就形成 ...

  7. Github开源项目详解--Mall(一)

    前言 跟着视频学了那么多技术,有没有自己尝试过做一个开源项目呢? 下面让我们一步一步分析这个最火的前后端分离项目 项目地址: https://github.com/YuyanCai/mall 从0开始 ...

  8. Java通用权限管理系统第一天

    品达通用权限系统 1. 项目概述 1.1 项目介绍 对于企业中的项目绝大多数都需要进行用户权限管理.认证.鉴权.加密.解密.XSS防跨站攻击等.这些功能整体实现思路基本一致,但是大部分项目都需要实现一 ...

  9. SpringBoot集成knife4j接口文档

    knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案. 其他的详情请看官方文档: knife4j官方文档 首先创建一个spring boot 项目, ...

最新文章

  1. 【Flutter】StatefulWidget 组件 ( Image 组件 | TextField 组件 )
  2. Leetcode 101.对称二叉树 (每日一题 20210709)
  3. BuildIt: Visual Studio .NET 的自动生成工具
  4. Windows——桌面快捷键Ctrl+Z撤销的文件恢复解决方案
  5. Django路由系统
  6. 一加、OPPO官宣合并,“父子团圆”能否拯救一加?
  7. Golang的工程管理
  8. server-2016安装软件提示缺失msvcr120.dll解决
  9. 时域有限差分法matlab,本科 研究生《时域有限差分法(基于MATLAB)》
  10. 印象笔记使用方法————印象笔记下载安装以及浏览器插件下载安装
  11. spring boot快速启动(七)——boot与定时任务
  12. chrome扩展程序安装_如何在Windows上删除“由企业策略安装”的Chrome扩展程序
  13. 【领英如何一键批量有效地加好友?】
  14. SG3525matlab,基于SG3525的BOOST变换器
  15. CAD注记转ArcGIS注记并文字内容挂接进属性表(附插件下载)
  16. 测试的阿萨德萨达阿萨德
  17. 【IDEA】IntelliJ IDEA代码特效插件-屏幕抖动和颗粒效果
  18. AT24C16页写和多页写
  19. c语言a b等于c的编程,简单的a+b (C语言代码)
  20. Python 实现丘德诺夫斯基(Chudnovsky)法計算高精度圓周率

热门文章

  1. 18秋学期《计算机网络》在线作业,18秋北交《计算机应用基础及计算机网络与应用》在线作业一-2辅导资料.docx...
  2. kafka 服务端消费者和生产者的配置
  3. win7 32位 安装opencv-python后,运行时提示 from .cv2 import *: DLL load failed: 找不到指定的模块 的解决办法...
  4. python拓展7(Celery消息队列配置定时任务)
  5. Web Storage中的sessionStorage和localStorage
  6. Sharepoint Designer 2007 Workflow
  7. 2007武汉.NET俱乐部沙龙-VS2008、WPF、Silverlight
  8. python numpy矩阵索引_python – Numpy中的矩阵索引
  9. 如何在Windows 7或Vista上安装IIS
  10. 飞利浦dicom_如何按计划打开或关闭飞利浦色相灯