一、Swagger简介

1.1-什么是Swagger?

  • Swagger是一个规范且完整的框架,用于生成、描述、调试和可视化Restfull风格的Web服务。
  • Swagger的目标是对Rest API定义一个标准且和语言无关的接口,可以让人和计算机拥有无需访问源码、文档或网络流量监控就可以发现和连接服务的能力。当通过Swagger进行正确定义,用于可以理解远程服务并使用最少逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger消除了调用服务时可能会有的猜测。

1.2-Swagger有什么优势?

  • 支持API自动生成同步的在线文档:使用Swagger后可以直接通过代码生成文档,不需要自己去手动编写接口文档了,对程序员来说是非常方便。
  • 提供Web页面在线测试API:光有文档还不够,Swagger生成的文档还支持在线测试。参数和格式都一定定义好了,直接在界面上输出参数对应的值即可在先测试接口。
  • Swagger可以生成客户端SDK代码用于各种不同平台的实现。
  • Swagger文件可以在许多不同的平台上从代码注释中自动生成。
  • Swagger有一个强大的社区,里面有许多强悍的贡献者。

1.3-Swagger、OpenAPI3.0、Restful API的区别?

  • Open API:OpenAPI是规范的正式名称。该规范的开发时由OpenAPI Initative推动的。该提倡涉及不同领域的30个组织——包括Microsoft、Google、IBM和CapitalOne.
  • Swagger:实现OpenAPI规范的工具之一。
  • RestfulAPI:是一种WebAPI设计架构风格。其中Rest即Represntaional State Transfer的缩写,可以翻译为"状态表述转换"。是目前比较成熟的一套互联网应用程序的API设计架构风格OpenAPI规范即是这个架构风格的具体实现规范。

1.4-Swagger工具

1.5-Swagger UI工具主要功能

  • 接口的文档在线自动生成
  • 功能测试等

1.6-Swashbuckle组件

  • Swashbuckle是.NET Core中对Swagger的封装,他有2个核心组件:

    • Swashbuckle.SwaggerGen:提供生成对象、方法、返回类型等JSON Swagger文档的功能。
    • Swashbuckle.SwaggerUI:是一个嵌入式版本的SwaggerUI工具,使用Swagger UI强大的富文本表现形式可定制化的来描述Web API的功能,并且包含内置的公共方法测试工具。

1.7-TPL

  • 任务并行库(TPL)是System.Threading.Tasks命名空间中的一组公共类型和API
  • TPL动态的扩展并发度,以最有效的使用可用的处理器。通过使用TPL,您可以最大限度的提高代码的性能,同时专注于您的代码业务。
  • 从.NETFramework4开始,TPL是编写多线程和并行代码的首选方式。

二、在ASP.NET Core Web API中使用Swagger UI

2.1-创建一个WebAPI项目

2.2-下载、安装、引入【Swashbuckle.AspNetCore】包

右击【解决方案】,然后点击【管理Nuget包】,搜索【Swashbuckle.AspNetCore】包,点击【安装】即可,博主这里下载的是【最新稳定版5.6.3】。

2.3-配置Swagger中间件(注册 Swagger 服务)

在【Startup.cs】文件中的【ConfigureService】类中引入命名空间,并注册Swagger服务并配置文档信息。

//引入命名空间
using Microsoft.OpenApi.Models; //注册Swagger
services.AddSwaggerGen(u => {
u.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
{
Version = "Ver:1.0.0",//版本
Title = "xxx后台管理系统",//标题
Description = "xxx后台管理系统:包括人员信息、团队管理等。",//描述
Contact=new Microsoft.OpenApi.Models.OpenApiContact {
Name="西瓜程序猿",
Email="xxx@qq.com"
}
});
});

如果安装的 Swashbuckle.AspNetCore Nuget包版本<= 3.0.0,写法略有不同。将 【OpenApiInfo】 替换成 【Info】 即可。

services.AddSwaggerGen(x =>
{ x.SwaggerDoc("v1", new Info() { Title = "Web Api", Version = "v1" }); });

2.4-启用Swagger中间件

在【Startup.cs】文件中的【Configure】类中启用Swagger中间件,为生成的JSON文档和SwaggerUI提供服务。

 //启用Swagger中间件
app.UseSwagger();
//配置SwaggerUI
app.UseSwaggerUI(u =>
{
u.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI_v1");
});

2.5-运行项目即可

2.5.1-如果我们直接运行项目,会出现这样的界面,说明我们的Web API程序没有问题。

2.5.1-然后我们在地址栏中输入【swagger/v1/swagger.json】。

可以看到浏览器出现这样的界面,如果出现这样的界面,说明Swagger也没有问题。

注意:按照2.5.1在地址栏中的【swagger/v1/swagger.json】需要与在【Startup.cs】文件中的【Configure】类中启用Swagger中间件添加的代码保持一致,因为这段代码就是自动生成JSON文件的,你配置的路径和JSON文件地址是什么,就在浏览器中输入对应的即可。

2.5.1-以上步骤都没问题的话,然后我们地址栏中输入【swagger/index.html】。

如果能出现以下界面,说明SwaggerUI也没有问题,都全部正常了。

2.6-如果想每次运行都默认直接到Swagger的页面

2.6.1-打开【launchSettings.json】这个文件。

2.6.2-然后将【launchUrl】的值从【weatherforecast】修改成【swagger】。

2.6.3-然后运行项目就直接进入Swagger首页了。

2.7-描述信息详细讲解



三、启用XML注释

3.1-双击解决方案

3-2-然后进入这个页面,加上这个代码

<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>

3-3.在【Startup.cs】文件中的【ConfigureService】类中注册读取XML信息的Swagger。

  #region 读取xml信息
// 使用反射获取xml文件,并构造出文件的路径
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
// 启用xml注释,该方法第二个参数启用控制器的注释,默认为false.
u.IncludeXmlComments(xmlPath, true);
#endregion

注意:

  • 对于Linux或者非Windows操作系统,文件名和路径区分大小写。例如“MyWebApiUseSwagger.xml”文件在Windows上有效,但在CentOS上是无效的。
  • 获取应用程序路径,建议采用Path.GetDirectoryName(typeof(Program).Assembly.Location)这种方式或者·AppContext.BaseDirectory这样来获取

四、实例

4.1-写一个实例:在【WeatherForecastController】控制器中写一个方法。

4.2-写上以下代码然后进行请求。

/// <summary>
/// 这是一个例子
/// </summary>
/// <remarks>
/// 描述:这是一个带参数的GET请求
/// Web API
/// </remarks>
/// <param name="id">主键ID</param>
/// <returns>测试字符串</returns>
[HttpGet("{id}")]
public ActionResult<string> Get(int id) {
return $"你请求的ID是:{id}";
}

4.3-可以看到【XML注释】起作用了,然后调用也成功了。

五、小知识点

5.1-当入参/出参返回object或者匿名类时,也需要加上注释怎么办?



(1)在方法中加上以下特性:

 [ProducesResponseType(typeof(xxx),200)]

(2)在Remarks节点下进行注释:



5.2-如何隐藏接口:有接口但是不想让别人看到?

在需要进行隐藏的接口上加上以下特性即可:

  [ApiExplorerSettings(IgnoreApi =true)]

5.3-设置路由前缀/自定义头内容/网页标题

如果不想加上"swagger",而输入5000即可访问,也可以自定义路由前缀,加上以下代码即可。



5.3-自定义首页

(1)新建一个【index.html】,右击该文件,点击【属性】,进行设置相关操作。





(2)在Startup.cs进行配置。



(3)静态页面下载地址:

https://github.com/swagger-api/swagger-ui/blob/master/dist/index.html

5.4-开启JWT认证

(1)在Startup.cs进行配置。

 #region 开启JWT
u.OperationFilter<SecurityRequirementsOperationFilter>(); u.AddSecurityDefinition("oauth2", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Description = "JWT授权(数据将在请求头中进行传输)直接在下框中输入Bearer { token } (注意两者之间是一个空格) ",
Name = "Authorization",
In = Microsoft.OpenApi.Models.ParameterLocation.Header,//jwt默认存放Authorazation信息的位置(请求头中)
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
});
#endregion

(2)下载包,注意版本号问题,尽量保持一致,不然会报错。



(3)然后将接口加上权限,去请求该接口,可以看到请求头中会有以下信息了。

5.5-使用Cookie持久化存储Token,解决每次刷新需要重新输入Token授权

目录结构:



(1)在【index.html】文件导入abp.js/swagger.js文件。



(2)在【swagger.js】里面需要注意请求授权地址。



(3)后端授权逻辑。





.NET Core WebAPI中使用Swagger(完整教程)的更多相关文章

  1. Asp.Net Core WebApi中接入Swagger组件(初级)

    开发WebApi时通常需要为调用我们Api的客户端提供说明文档.Swagger便是为此而存在的,能够提供在线调用.调试的功能和API文档界面. 环境介绍:Asp.Net Core WebApi + S ...

  2. 在asp.net core webapi 中开启swagger

    首先需要安装包 Swashbuckle.AspNetCore 接着在项目中右键属性 接着在Startup 文件中声明一个字段 private string currentAssemblyName = ...

  3. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  4. ASP.NET Core WebAPI中的分析工具MiniProfiler

    介绍 作为一个开发人员,你知道如何分析自己开发的Api性能么? 在Visual Studio和Azure中, 我们可以使用Application Insight来监控项目.除此之外我们还可以使用一个免 ...

  5. 如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

    在上一篇文章(如何在 .NET Core WebApi 中处理 MultipartFormDataContent)中,我们有描述过如何以最简单的方式在 .NET Core WebApi 中处理 Mul ...

  6. .net WebApi中使用swagger

    我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...

  7. .NET Core WebApi中实现多态数据绑定

    什么是多态数据绑定? 我们都知道在ASP.NET Core WebApi中数据绑定机制(Data Binding)负责绑定请求参数, 通常情况下大部分的数据绑定都能在默认的数据绑定器(Binder)中 ...

  8. .net WebApi中使用swagger生成WepApi集成测试工具

    我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...

  9. 【swagger学习】.net WebApi中使用swagger

    我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...

  10. webapi中使用swagger

    net WebApi中使用swagger 我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一 ...

随机推荐

  1. 使用require.context实现优雅的预加载

    前言 在前端开发中,对页面花里胡哨度[注1]要求越高的页面,用到的图片.音频什么的就越多,比如什么结婚请柬.展会请柬.发布会宣传页.数据大屏.虽然现在浏览器不允许网页在没有用户交互的情况下播放音频,但 ...

  2. PCI-5565系列反射内存卡 反射内存交换机

    主要性能:1路发射,一路接收光纤高速网络2.125GHz.最大256个节点.在板128MByte SDRAM.光纤通讯协议不占用CPU资源.动态包长,每个包4 到 64 个字节.33MHz PCI 3 ...

  3. 工作中,Oracle常用函数

    目录 1.序言 2.Oracle函数分类 3.数值型函数 3.1 求绝对值函数 3.2 求余函数 3.3 判断数值正负函数 3.4 三角函数 3.5 返回以指定数值为准整数的函数 3.6 指数.对数函 ...

  4. #Python基础 利用Pyinstaller 模块对python代码进行打包exe

    一般我们都用 Python 的 Pyinstaller 模块进行打包,这里记录Pyinstaller 模块进行打包. 一:安装 Pyinstaller 模块 pip install PyInstall ...

  5. stl------stack与queue

    stack与queue 一.stack 二.queue 例题:详见我的另一篇博文: 栈------表达式求值 http://www.cnblogs.com/Cloud-king/p/8453703.h ...

  6. 2023-04-24:用go语言重写ffmpeg的muxing.c示例。

    2023-04-24:用go语言重写ffmpeg的muxing.c示例. 答案2022-04-24: 本程序的大体过程如下: 打开输出文件并写入头部信息. 添加音频和视频流,并为每个流创建 AVCod ...

  7. Selenium - 浏览器配置(3) - 沙盒模式/不打开浏览器运行

    Selenium - 浏览器配置 沙盒模式 需要在Linux环境中运行,但不需要打开浏览器进行UI测试,可以加载selenium的无痕模式: 如果使用沙盒模式运行selenium,则部分seleniu ...

  8. ICANN 2001-Learning to Learn Using Gradient Descent

    Key Gradient Descent+LSTM元学习器 解决的主要问题 在之前的机器学习的学习方法中,不会利用到之前的经验,利用到之前经验的"knowledge transfer&quo ...

  9. Vue+Element中Table懒加载,新增、删除操作后手动更新

    Vue+Element中Table懒加载,新增.删除操作后手动更新 今天开发一个自动分类管理系统中行业类型管理,使用table tree 进行节点懒加载,遇到的问题是:使用load 进行懒加载后在ta ...

  10. js 获取系统yyyyMMdd时间

    var myDate = new Date(); var Time1 = myDate.toLocaleDateString()//yyyy/MM/dd 这个方法如果是1月份,会显示yyyy/M/dd ...