如何在 ASP.Net Core 中使用 Swagger

开发 开发工具
大家在开发完 webapi 后,经常为了方便接口双方对接,需要将 webapi 接口文档化,那有没有什么快捷可交互的文档呢?可以利用快捷工具 Swagger,它的可视化 UI 可轻松助你 API 文档化的同时还方便测试 API。

[[374264]]

本文转载自微信公众号「码农读书」,作者码农读书 。转载本文请联系码农读书公众号。

大家在开发完 webapi 后,经常为了方便接口双方对接,需要将 webapi 接口文档化,那有没有什么快捷可交互的文档呢?可以利用快捷工具 Swagger,它的可视化 UI 可轻松助你 API 文档化的同时还方便测试 API。

Swashbuckle 就是一个用于生成 Swagger 文档的开源工具包,这篇文章将会讨论如何利用 Swashbuckle 来为你的 Restful API 生成可交互的文档。

安装 Swagger 中间件

要想利用 Swagger 文档化,需要 nuget 引用 Swashbuckle.AspNetCore 包,还可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:

  1. dotnet add package Swashbuckle.AspNetCore 

配置 Swagger 中间件

为了配置 Swagger,在 Startup.ConfigureServices 方法中添加如下代码,注意下面的 AddSwaggerGen 方法是用于给 API 文档 添加一些元数据。

  1. services.AddSwaggerGen(c => 
  2.            { 
  3.                c.SwaggerDoc("v1", new Info 
  4.                { 
  5.                    Version = "v1"
  6.                    Title = "Swagger Demo"
  7.                    Description = "Swagger Demo for ValuesController"
  8.                    TermsOfService = "None"
  9.                    Contact = new Contact() { Name = "Joydip Kanjilal"
  10.                    Email = "joydipkanjilal@yahoo.com"
  11.                    Url = "www.google.com" } 
  12.                }); 
  13.            }); 

接下来就要启动 Swagger了,在 Startup.Configure 方法下添加如下代码:

  1. app.UseSwagger(); 
  2.     app.UseSwaggerUI(c => 
  3.     { 
  4.         c.SwaggerEndpoint("/swagger/v1/swagger.json""v1"); 
  5.     }); 

为了完整性,下面是 Startup 中的所有代码清单。

  1. using Microsoft.AspNetCore.Builder; 
  2. using Microsoft.AspNetCore.Hosting; 
  3. using Microsoft.AspNetCore.Mvc; 
  4. using Microsoft.Extensions.Configuration; 
  5. using Microsoft.Extensions.DependencyInjection; 
  6. using Swashbuckle.AspNetCore.Swagger; 
  7. namespace IDGSwaggerDemo 
  8.     public class Startup 
  9.     { 
  10.         public Startup(IConfiguration configuration) 
  11.         { 
  12.             Configuration = configuration; 
  13.         } 
  14.         public IConfiguration Configuration { get; } 
  15.         public void ConfigureServices(IServiceCollection services) 
  16.         { 
  17.             services.AddMvc().SetCompatibilityVersion 
  18.             (CompatibilityVersion.Version_2_2);    
  19.             services.AddSwaggerGen(c => 
  20.             { 
  21.                 c.SwaggerDoc("v1", new Info 
  22.                 { 
  23.                     Version = "v1"
  24.                     Title = "Swagger Demo"
  25.                     Description = "Swagger Demo for ValuesController"
  26.                     TermsOfService = "None"
  27.                     Contact = new Contact() { Name = "Joydip Kanjilal"
  28.                     Email = "joydipkanjilal@yahoo.com"
  29.                     Url = "www.google.com" 
  30.                 } 
  31.                 }); 
  32.             }); 
  33.         } 
  34.         public void Configure(IApplicationBuilder app, 
  35.        IHostingEnvironment env) 
  36.         { 
  37.             if (env.IsDevelopment()) 
  38.             { 
  39.                 app.UseDeveloperExceptionPage(); 
  40.             } 
  41.             app.UseMvc(); 
  42.             app.UseSwagger(); 
  43.             app.UseSwaggerUI(c => 
  44.             { 
  45.                 c.SwaggerEndpoint("/swagger/v1/swagger.json""v1"); 
  46.             }); 
  47.         } 
  48.     } 

浏览 Swagger UI

现在我们运行一下应用程序来浏览一下 Swagger UI 地址,可以看到 UI 界面如下图所示,图中不同的 Http 请求使用了不同的颜色进行标识,你甚至可以在UI上直接测试不同的 api 接口。

在 Action 方法上创建xml注解

到目前为止一切顺利,在刚才生成的 swagger 文档中,并没有看到 5 个 api 接口的任何注解,这就不优雅了,如果想要在 swagger 文档上增加 xml 注解,简单粗暴的做法可以直接在 Controller.Action 顶部写上注解信息。

接下来在 ValuesController 下的每一个 Action 上都加上注解,下面就是修改后的 ValueController。

  1. [Route("api/[controller]")] 
  2.     [ApiController] 
  3.     public class ValuesController : ControllerBase 
  4.     { 
  5.         /// <summary> 
  6.         /// Get action method without any argument 
  7.         /// </summary> 
  8.         /// <returns></returns
  9.         [HttpGet] 
  10.         public ActionResult<IEnumerable<string>> Get() 
  11.         { 
  12.             return new string[] { "value1""value2" }; 
  13.         } 
  14.  
  15.         /// <summary> 
  16.         /// Get action method that accepts an integer as an argument 
  17.         /// </summary> 
  18.         /// <param name="id"></param> 
  19.         /// <returns></returns
  20.         [HttpGet("{id}")] 
  21.         public ActionResult<string> Get(int id) 
  22.         { 
  23.             return "value"
  24.         } 
  25.  
  26.         /// <summary> 
  27.         /// Post action method to add data 
  28.         /// </summary> 
  29.         /// <param name="value"></param> 
  30.         [HttpPost] 
  31.         public void Post([FromBody] string value) 
  32.         { 
  33.         } 
  34.  
  35.         /// <summary> 
  36.         /// Put action method to modify data 
  37.         /// </summary> 
  38.         /// <param name="id"></param> 
  39.         /// <param name="value"></param> 
  40.         [HttpPut("{id}")] 
  41.         public void Put(int id, [FromBody] string value) 
  42.         { 
  43.         } 
  44.  
  45.         /// <summary> 
  46.         /// Delete action method 
  47.         /// </summary> 
  48.         /// <param name="id"></param> 
  49.         [HttpDelete("{id}")] 
  50.         public void Delete(int id) 
  51.         { 
  52.         } 
  53.     } 

打开 xml 注解

值得注意的是:Swagger 默认并不会显示 XML 注解,需要手工打开它,那怎么做呢?右键 Project,选择 Properties 后切换到 Build 页面,然后选中 XML documentation file 项 并且指定好 xml 生成的位置,参考如下:

接下来还要在 ConfigureServices 方法下将生成xml 的路径配置到 swagger 中,如下代码所示:

  1. c.IncludeXmlComments(@"D:\Projects\IDG\IDGSwaggerDemo\IDGSwaggerDemo\IDGSwaggerDemo.xml"); 

这就是打开 Swagger 中的 xml 注解 所需的所有事情。

指定启动url 到 Swagger UI

要想将启动项目的url指到 SwaggerUI,右键 Project 并选择 Properties,在 Debug 的 Lanuch browser 上指定 swagger 即可,如下图所示:

再次运行程序可以发现默认页就是 Swagger URL 了,如下图所示:

从图中可以看到,5个API方法后面都有相应的 xml 注解了。

Swashbuckle 是一个非常好的工具,可以简单粗暴的给 API接口生成文档,从文中也可以看出 Swashbuckle 的配置非常简单,Swagger 还有一些更高级的功能,比如通过 CSS 来定制 Swagger UI,还可以根据API的版本生成不同的 Swagger 文档,后续的文章还会跟大家介绍更多高级的功能。

译文链接:https://www.infoworld.com/article/3400084/how-to-use-swagger-in-aspnet-core.html

 

责任编辑:武晓燕 来源: 码农读书
相关推荐

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通讯TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-03-10 09:40:43

LamarASP容器

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa开源框架

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-02-28 20:56:37

NCache缓存框架

2021-02-07 17:29:04

监视文件接口

2021-06-22 16:59:56

微软.NETC# 软件开发

2021-01-26 14:57:00

中间件应用模块化

2021-01-04 05:44:54

框架日志

2021-04-12 07:03:10

轻量级模块化框架

2022-08-01 08:00:00

开发工具跟踪侦听器

2017-10-20 08:52:11

内存缓存并发模式Linux

2009-02-05 14:02:46

SmtpMail发送邮件ASP.NET

2021-04-14 07:35:12

Json格式化日期

2021-11-01 14:52:38

ElasticSear索引SQL

2009-03-30 10:34:03

ASP.NETMySQL
点赞
收藏

51CTO技术栈公众号