简介

随着微软.NET Core的诞生,除了恐龙以外第二个应该灭绝的.NET程序员,总算看到了一米阳光。真是做噩梦都没想到,有一天我们也可以抛弃Windows这2货,去拥抱主流的Linux+Docker的时代。

尝试一些事,遭遇失败后从中学习,比什么事都不做更好。—马克.佐克伯

Swagger对我们有什么帮助?

对于开发人员来说,调试API接口和生成API文档是一件极其头疼的事情。我们在百忙之中,不得不为前端开发人员编写接口文档,来描述系统中N个接口的参数及返回状态,再借助PostMan等第三方工具来测试API的正确性。

在有了Swagger后,这项体力活终于得到了极大的改善,我们不但可以自动构建漂亮的交互式API说明文档,还可以直接调试API接口的正确性。最新版的Swagger已经完美支持Open Api规范及JWT Token授权访问等。

我们可以用它来做什么?

  • 生成精美的API接口文档
  • 调试JWT授权接口
  • 生成各个类库中视图模型的描述

项目开源地址

Swagger项目开源地址:https://github.com/domaindrivendev/Swashbuckle.AspNetCore

1.创建一个.NET Core项目

首先,新建一个.NET Core 3.x Web Api 项目,打开Nuget安装管理器,勾选左下角的显示预览发行包,搜索Swashbuckle.AspNetCore,版本选择5.0.0-rc4的点添加,注意因为.NET Core 3.x刚出不久,目前支持的库很多都是预览版,这里我选5.0.0-beta是会报错,选5.0.0-rc4使用正常。

设置生成XML描述信息

耐心等待几秒钟添加完成后,我们选中左侧刚才创建的Api项目,右键>属性(Mac里叫选项),勾选生成XML文档,这个是用来生成为Swagger所用的描述信息。

开始配置Swagger

然后我们打开Startup.cs文件,来对Swagger配置进行一些必要的配置,在ConfigureServices方法我们添加一下配置:

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Crypto Exchange",
Description = "基于.NET Core 3.0 的区块链数字货币交易所",
Contact = new OpenApiContact
{
Name = "Microfisher",
Email = "276679490@qq.com",
Url = new Uri("http://cnblogs.com/microfisher"),
},
}); // 加载程序集的xml描述文档
var baseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
var xmlFile = System.AppDomain.CurrentDomain.FriendlyName+ ".xml";
var xmlPath = Path.Combine(baseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
})

参数都很简单,就是Swagger界面上显示的一些信息,注意这里一定要习惯使用Path.Combine来拼接路径,很多同学喜欢双斜杠来拼接,在Mac或Linux下是会出问题的。既然已经拥抱开源技术,尽量使用Mac或Linux来开发.NET Core吧。然后我们在Configure方法里添加以下代码:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Crypto Exchange");
// 访问Swagger的路由后缀
c.RoutePrefix = "swagger";
});

预览一下小成果

到这里为止,最基本的配置就完成了,其中RoutePrefix是访问Swagger的路由,如果设置为空则不需要输入/swagger后缀来访问。现在我们F5启动项目看看,我的本地网址是https://localhost:5000,所以直接访问:https://localhost:5000/swagger如下图所示,我去这界面也太丑了,说好的精美绝伦呢?不急不急,我们慢慢调优

启用JWT授权

目前很多网站都使用了JWT(JSON WEB TOKEN)来作为账户系统的认证授权,JWT以它的简单、高效、分布式优势很快成为各大网站及APP的流行验证方式。这里我们不做过多的介绍,如果大家感兴趣我可以再写一篇长文来介绍的优势和使用方法。我们继续来为Swagger添加JWT授权认证,依旧打开Startup.cs文件,修改上面ConfigureServices方法中的代码:

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Crypto Exchange",
Description = "基于.NET Core 3.0 的区块链数字货币交易所",
Contact = new OpenApiContact
{
Name = "Microfisher",
Email = "276679490@qq.com",
Url = new Uri("http://cnblogs.com/microfisher"),
},
}); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
{
Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
BearerFormat = "JWT",
Scheme = "Bearer"
}); c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] { }
}
}); var baseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
var xmlFile = System.AppDomain.CurrentDomain.FriendlyName + ".xml";
var xmlPath = Path.Combine(baseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});

预览一下授权设置

然后再启动项目,你会发现右侧多了一个Authorize绿色的带锁按钮,这个按钮点开后就可以设置我们的JWT Token信息了,格式是:Bearer Token,注意Bearer于Token之间有个空格。设置好Token后,你请求任意的API接口时,Swagger会自动附带Token到请求的Header中。

创建一个RESTFUL接口

上面我们已经实现了Swagger的各项配置,现在我们来删除默认生成的控制器WeatherForecastController及视图模型WeatherForecast,新建一个AccountController及几个视图模型,让Swagger返回带描述的接口文档。

//[Authorize]
[Produces("application/json")]
[Route("v1/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
/// <summary>
/// 创建信息
/// </summary>
/// <param name="createViewModel">参数</param>
/// <returns>状态</returns>
[HttpPost]
public StatusViewModel Post([FromBody]CreateViewModel createViewModel)
{
return new StatusViewModel { };
} /// <summary>
/// 删除信息
/// </summary>
/// <param name="deleteViewModel">参数</param>
/// <returns></returns>
[HttpDelete]
public StatusViewModel Delete([FromQuery]DeleteViewModel deleteViewModel)
{
return new StatusViewModel { };
} /// <summary>
/// 查询信息
/// </summary>
/// <param name="queryViewModel">参数</param>
/// <returns></returns>
[HttpGet]
public StatusViewModel Get([FromQuery]QueryViewModel queryViewModel)
{
return new StatusViewModel { };
} /// <summary>
/// 修改信息
/// </summary>
/// <param name="updateViewModel">参数</param>
/// <returns></returns>
[HttpPut]
public StatusViewModel Put([FromQuery]UpdateViewModel updateViewModel)
{
return new StatusViewModel { };
}
}

创建几个视图模型

再按自己喜欢的风格新建几个视图模型,用///为各个字段添加summary后如下:

public class UpdateViewModel
{
/// <summary>
/// ID
/// </summary>
public long Id { get; set; } /// <summary>
/// 账号
/// </summary>
public long Account { get; set; } /// <summary>
/// 密码
/// </summary>
public long Password { get; set; }
}

测试最终成果

最后我们来看看效果,随便展开一个API接口,可以看到我们给视图模型写的注释已经显示在Swagger上了,前端开发人员一看就懂,输入一些接口参数,点一下执行就能看到返回值了:

再看我们的请求Header中已经包含了JWT授权信息(Bearer 123456789)是我随意设置的,让你们前端调试的时候换成你们的Token就行了。

如何使用Swagger为.NET Core 3.0应用添加JWT授权说明文档的更多相关文章

  1. .NET Core 2.0 Preview 1发布下载和文档

    .NET Core 2.0.0 Preview 1 发布于 2017 5.10. 你可以通过 Visual Studio 2017 Preview 15.3, Visual Studio for Ma ...

  2. swagger api文档添加jwt授权配置

    最近写的swagger文档,要加jwt授权,所以几经google终于搞定了,简简单单几行配置如下: securityDefinitions: APIKey: type: apiKey name: Au ...

  3. .NET Core 3.0 使用Nswag生成Api文档和客户端代码

    摘要 在前后端分离.Restful API盛行的年代,完美的接口文档,成了交流的纽带.在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化.下文将会演示 利用N ...

  4. asp.net core 2.0的认证和授权

    在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理, ...

  5. 【转载】asp.net core 2.0的认证和授权

    在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理, ...

  6. 把旧系统迁移到.Net Core 2.0 日记 (18) --JWT 认证(Json Web Token)

    我们最常用的认证系统是Cookie认证,通常用一般需要人工登录的系统,用户访问授权范围的url时,会自动Redirect到Account/Login,登录后把认证结果存在cookie里. 系统只要找到 ...

  7. .net core 2.0的认证和授权

    在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理, ...

  8. ASP.Net Core 3.0 中使用JWT认证

    JWT认证简单介绍     关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构.     JWT主要由三部分组成,如下: HEADER.PAYLOAD.SIGNATURE HEADER包 ...

  9. Blazor client-side + webapi (.net core 3.1) 添加jwt验证流程(非host)第二步 添加Identity

    添加Identity数据上下文 安装nuget包:Microsoft.AspNetCore.Identity.EntityFrameworkCore 创建ApplicationDbContext类 创 ...

随机推荐

  1. SpringCloud之Turbine

    [前面的话]书接上文,本文的某些知识依赖我的上一篇SpringCLoud的文章:SpringCloud之Feign,如果没有看过可以先移步去看一下.前文提到了hystrix的应用,以及hystrix的 ...

  2. Python + opencv 实现图片文字的分割

    实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...

  3. IT修养-基础篇

    1.科学基础 成为开发人员的过程不尽相同,有的是科班出身,有的是兴趣爱好,还有的是专业机构的培训,在这个过程中,可能全面或者零散甚至没有学习过计算机基础学科,但无论是哪一种,想要成为更高层次的开发人员 ...

  4. Excel VBA入门(十)用户窗体开发

    VBA 中的用户窗体就是指带 UI 的用户界面,在运行的时候会单独弹出一个窗口,类似于在 windows 系统中运行的一个可执行程序一样(这个说法不太严谨,因为可执行程序也可能是只有命令窗口而没有 U ...

  5. 报表统计——java实现查询某年12个月数据,没数据补0

    一般图表绘制例如echarts等,返回数据格式都大同小异.重点是利用sql或者java实现数据格式的转型,接下来是关键部分: 1.mapper层sql语句,返回统计好的月份与对应月份的数据. < ...

  6. quartz-scheduler定时器实现

    第一步,在pom.xml中引入quartz-scheduler. <dependency> <groupId>org.quartz-scheduler</groupId& ...

  7. vue使用readAsDataURL实现选择图片文件后预览

    vue实现选择图片文件后预览 利用h5的api可以实现选择文件并实现预览 readAsDataURL 方法会读取指定的 Blob 或 File 对象.读取操作完成的时候,readyState 会变成已 ...

  8. <反向传播(backprop)>梯度下降法gradient descent的发展历史与各版本

    梯度下降法作为一种反向传播算法最早在上世纪由geoffrey hinton等人提出并被广泛接受.最早GD由很多研究团队各自发表,可他们大多无人问津,而hinton做的研究完整表述了GD方法,同时hin ...

  9. .Net Core自动化部署系列(一):Jenkins + GitLab

    项目进行微服化改造后系统发布就变得愈为重要,因为持续集成导致部署变得越来越频繁,人工部署带来的一些问题日渐凸显,大家可能都有被系统部署线问题困扰过的经历. 本篇我们将会使用Jenkins+Gitlab ...

  10. 大家久等了,改造版阿里巴巴 sentinel 控制台终于开源了

    前言 最近几天,好几个小伙伴在后台询问,改造后的 sentinel-dashboard 什么时候开源.讲真,不是不想给大家放出来,是因为一些地方还没有完善好,怕误导了大家,在经过了一个星期业余时间的努 ...