.Net之Swagger基础使用

介绍

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的使用操作还有很多,上面有些配置也没有详细说到,只说了一些功能性的操作。更详细操作需要自行学习。

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

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

相关文章

孩子不是笨,他和“最强大脑”差的是这个!

小木最近看到一则消息推送&#xff0c;说家长辅导孩子陪写作业简直就是一道“送命题”。朋友圈更是掀起了一股“提前嫁儿嫁女”的热潮。为什么孩子对数学一点兴趣也没有&#xff1f;为什么再简单的一道题&#xff0c;换个数字换个形式&#xff0c;孩子就一问三不会了&#xff1…

c++ 隐藏进程_Linux 查看进程的动态信息

前言top命令经常用来监控Linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用情况目录一、描述二、top命令常用字段含义三、top中的子命令四、总结五、思维导图一、描述1、top命令经常用来监控Linux的系统状况是常用的性能分析工…

.net core针对async ()=的安全处理

最近在做一个功能需要传递一个委托作为回调逻辑处理&#xff0c;但在使用中定义了async ()>来处理awaiter逻辑那就存在一个安全问题了。了解async/awaiter的朋友一定清楚async void函数带来的致命风险&#xff01;async void会阻断异常路由&#xff0c;即当前函数没有try的情…

这三道题,总有一道你是答不出来的

全世界只有3.14 % 的人关注了数据与算法之美大家好&#xff0c;我是最近过得不太舒心的卢sir。经常被小思妹提的各种奇葩数学题搞得云里雾里的。我一看数学题就想做&#xff0c;没想到这些题目都是奇葩中的奇葩&#xff0c;不是那写错就是这计算错。为了捍卫我最后的倔强&#…

前端对div连线_《前端图形学从入门到放弃》003 三维世界

从本篇起&#xff0c;我们将正式进入webgl的3D世界本篇涵盖的内容包括&#xff1a;webgl它在干啥&#xff1f;如何画一个正方体&#xff1f;如何成为一个“有深度”的正方体&#xff1f;正方体要离家出走了&#xff01;webgl它在干啥&#xff1f;首先我们需要知道webgl的世界其…

通过R,让你的数据分析更简便!

R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;是目前主流数据应用软件之一。为了更好地帮助大家了解并快速入门R语言&#xff0c;现超级数学建模携手柯老师以R语言为基础&#xff0c;向大家隆重推出《R语言基础》系列课。柯老…

r语言用行名称提取数据框信息显示na_学会这些R语言技巧至少可以节省半年时间...

ubuntu备忘定期清空回收站扩增子数据牢记r ubuntu 相关技巧和备忘待解决问题1&#xff1a;phyloseq有一篇文章案例使用输入和输出文件相同的文件名&#xff0c;无法执行待解决问题2&#xff1a;待解决问题3&#xff1a;样品分组文件太长了&#xff0c;导致提取出来数据存在NA值…

hibernate.cfg.xml的一些事

Hibernate连接数据库的配置文件书写一般有两种方式&#xff1a; 第一种方式&#xff1a;使用开发环境直接连接数据库最后生成hibernate.cfg.xml文件 第二种方式&#xff1a;使用已有的模版直接拷贝的工作的目录下&#xff0c;通过相应的修改获得需要的连接数据库的配置文件&…

配置静态路由下一跳为本地出战接口和IP地址的区别

配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时&#xff0c;下一跳可以使用下一路由器的IP地址&#xff0c;也可以使用本路由器的出站接口。在点对点的网络中&#xff0c;两者可能没有什么差别&#xff0c;但在以太网中或者NBMA网络类型&#xff0c;两者有很…

使用 Source Generator 自动生成 WEB API

使用 Source Generator 自动生成 WEB APIIntro上次我们介绍了使用 Source Generator 的应用&#xff0c;有小伙伴留言说想要自动生成一套 ABP 相关的东西&#xff0c;我对 ABP 不怎么熟悉&#xff0c;所以写了一个简单版的雏形&#xff0c;可以根据自定义的模板去动态生成&…

Excel中的散点图这么强大,学习了!

全世界只有3.14 % 的人关注了数据与算法之美平时见得最多的也许是柱形图了&#xff0c;但我个人最喜欢的却是散点图。在讲散点图之前&#xff0c;我先阐述一个不太严谨的个人观点。我认为&#xff0c;所有的数据图表都可以分为两类&#xff0c;一类是偏重于展示&#xff0c;一类…

mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?

创建数据表的数据,字段在表中的位置已经确定了。但要修改字段在表中的排列位置,则需要使用ALTER TABLE语句来处理。在MySQL中,修改字段排列位置的基本语法格式如下: ALTER TABLE MODLFY 字段名1 数据类型 FIRST|AFTER 字段名2 在上述格式中,“字段名1”指的是修改位置的字段…

趣读:程序员泪流满面的20个瞬间!

全世界只有3.14 % 的人关注了数据与算法之美【一】老板突然说&#xff0c;想跟你聊一聊你的年终review结果【二】记一次难忘的debug经历【三】——昨晚又加班了吧&#xff1f;——你怎么知道的&#xff1f;【四】老板定下了春节期间on call的人!【五】产品crash了&#xff0c;最…

记一次 .NET 某医院HIS系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高&#xff0c;求助如何分析&#xff1f;和这位朋友沟通下来&#xff0c;据说这问题困扰了他们几年????&#xff0c;还请了微软的工程师过来解决&#xff0c;无疾而终&#xff0c…

mysql判断表存在的sql语句_SQL 语句判断已知表是否存在_MySQL

问:怎样用SQL语句来判断已知表是否存在?答:具体解决方法如下:注释:以下代码为通常的引用Dao做的一模块以下为引用的内容&#xff1a;Function fExistTable(strTableName As String) As IntegerDim db As DatabaseDim i As IntegerSet db DBEngine.Workspaces(0).Databases(0)…

全球六大顶级域名动态:7月上旬.COM新增18.4万个

中国IDC评述网07月17日报道&#xff1a;据域名统计机构Whois Source公布的最新数据显示&#xff0c;截至7月15日&#xff0c;全球六大顶级域名&#xff08;.COM、.NET、.ORG、.INFO和.US&#xff09;的域名总量达到了 141,259,651个。其中&#xff0c;.COM域名注册量达104,165,…

如何用大数据找到男/女朋友?

全世界只有3.14 % 的人关注了数据与算法之美小柯25岁&#xff0c;单身男&#xff0c;热衷大数据&#xff0c;并决定认真钻研&#xff0c;用数据分析来实现自己的“脱单计划”。找女友第一步&#xff1a;整理思路找女友第二步&#xff1a;界定问题1、为什么要找女朋友&#xff0…

.NET5 开发手机提词应用,基于内嵌Web服务器及PowerPoint自动化

项目说明我使用电脑录制视频教程的时候&#xff0c;会展示PPT给观众&#xff0c;同时也有一些提示性的文字给我自己看。这就类似于很多电视节目录制现场的“提词器”。节目录制现场的提词器在PC环境下&#xff0c;PowerPoint也具有提词器功能&#xff0c;在编辑PPT的时候&#…

[Linux程序设计][调试][ElectricFence]

gcc –o test test.c –lefence 提前发现动态内存的错误 转载于:https://blog.51cto.com/honglei/934379

薄如冈本,37°恒温发热超薄保暖内衣,既要风度也要温度

问君能有几多愁恰似没穿秋裤遇寒流俗话说的好你在北方的暖气里穿着短袖我在南方的艳阳里瑟瑟发抖为了暖和一点大家都穿得里三层外三层的什么大衣棉袄厚外套都搬出来了但谁都不愿意在冬天穿的像个200斤的胖子好吗&#xff01;&#xff1f;可是为了风度连狗命都不要了吗&#xff…