如何在 ASP.Net Core 中使用 Swagger - 51CTO.COM

2021-01-08 51CTO

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書 。轉載本文請聯繫碼農讀書公眾號。

大家在開發完 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 命令行工具輸入以下命令:

dotnet add package Swashbuckle.AspNetCore 

配置 Swagger 中間件

為了配置 Swagger,在 Startup.ConfigureServices 方法中添加如下代碼,注意下面的 AddSwaggerGen 方法是用於給 API 文檔 添加一些元數據。

services.AddSwaggerGen(c =>            {                c.SwaggerDoc("v1", new Info                {                    Version = "v1",                    Title = "Swagger Demo",                    Description = "Swagger Demo for ValuesController",                    TermsOfService = "None",                    Contact = new Contact() { Name = "Joydip Kanjilal",                    Email = "joydipkanjilal@yahoo.com",                    Url = "www.google.com" }                });            }); 

接下來就要啟動 Swagger了,在 Startup.Configure 方法下添加如下代碼:

app.UseSwagger();     app.UseSwaggerUI(c =>     {         c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");     }); 

為了完整性,下面是 Startup 中的所有代碼清單。

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Swashbuckle.AspNetCore.Swagger; namespace IDGSwaggerDemo {     public class Startup     {         public Startup(IConfiguration configuration)         {             Configuration = configuration;         }         public IConfiguration Configuration { get; }         public void ConfigureServices(IServiceCollection services)         {             services.AddMvc().SetCompatibilityVersion             (CompatibilityVersion.Version_2_2);                services.AddSwaggerGen(c =>             {                 c.SwaggerDoc("v1", new Info                 {                     Version = "v1",                     Title = "Swagger Demo",                     Description = "Swagger Demo for ValuesController",                     TermsOfService = "None",                     Contact = new Contact() { Name = "Joydip Kanjilal",                     Email = "joydipkanjilal@yahoo.com",                     Url = "www.google.com"                 }                 });             });         }         public void Configure(IApplicationBuilder app,        IHostingEnvironment env)         {             if (env.IsDevelopment())             {                 app.UseDeveloperExceptionPage();             }             app.UseMvc();             app.UseSwagger();             app.UseSwaggerUI(c =>             {                 c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");             });         }     } } 

瀏覽 Swagger UI

現在我們運行一下應用程式來瀏覽一下 Swagger UI 地址,可以看到 UI 界面如下圖所示,圖中不同的 Http 請求使用了不同的顏色進行標識,你甚至可以在UI上直接測試不同的 api 接口。

在 Action 方法上創建xml註解

到目前為止一切順利,在剛才生成的 swagger 文檔中,並沒有看到 5 個 api 接口的任何註解,這就不優雅了,如果想要在 swagger 文檔上增加 xml 註解,簡單粗暴的做法可以直接在 Controller.Action 頂部寫上註解信息。

接下來在 ValuesController 下的每一個 Action 上都加上註解,下面就是修改後的 ValueController。

[Route("api/[controller]")]     [ApiController]     public class ValuesController : ControllerBase     {         /// <summary>         /// Get action method without any argument         /// </summary>         /// <returns></returns>         [HttpGet]         public ActionResult<IEnumerable<string>> Get()         {             return new string[] { "value1", "value2" };         }          /// <summary>         /// Get action method that accepts an integer as an argument         /// </summary>         /// <param name="id"></param>         /// <returns></returns>         [HttpGet("{id}")]         public ActionResult<string> Get(int id)         {             return "value";         }          /// <summary>         /// Post action method to add data         /// </summary>         /// <param name="value"></param>         [HttpPost]         public void Post([FromBody] string value)         {         }          /// <summary>         /// Put action method to modify data         /// </summary>         /// <param name="id"></param>         /// <param name="value"></param>         [HttpPut("{id}")]         public void Put(int id, [FromBody] string value)         {         }          /// <summary>         /// Delete action method         /// </summary>         /// <param name="id"></param>         [HttpDelete("{id}")]         public void Delete(int id)         {         }     } 

打開 xml 註解

值得注意的是:Swagger 默認並不會顯示 XML 註解,需要手工打開它,那怎麼做呢?右鍵 Project,選擇 Properties 後切換到 Build 頁面,然後選中 XML documentation file 項 並且指定好 xml 生成的位置,參考如下:

接下來還要在 ConfigureServices 方法下將生成xml 的路徑配置到 swagger 中,如下代碼所示:

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

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • asp.net core 使用 TestServer 來做集成測試
    asp.net core 使用 TestServer 來做集成測試Intro之前我的項目裡的集成測試是隨機一個埠,每次都真實的啟動一個 WebServer,之前也有看到過微軟文檔上 TestServer 的介紹,當時沒仔細看過以為差不多就沒用,一直是啟動了一個真正的
  • 接口文檔從Swagger升級成knife4j使用教程
    Swagger應該是大部分Java程式設計師都有聽說過或者使用過,不過呢,我覺得Swagger的界面使用起來有太好用,聲明僅代表我的個人觀點。Knife4j是一個為Swagger接口文檔賦能的工具,提供了我認為更加良好的操作體驗。截止2020-11-02,版本已經升級到Knife4j 2.0.7了。
  • 聚投訴網友投訴51CTO學院:51cto學院虛假宣傳aci營養師作用,讓人買...
    2019年11月27日 21:30,呂女士發起對51CTO學院的投訴。截止發稿前,51CTO學院有效投訴11次。
  • 2020徵文-鴻蒙開發板 Onenet平臺+開發板開關燈控制
    想了解更多內容,請訪問:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zzOneNET是由中國移動打造的PaaS物聯網開放平臺採用Onenet平臺:多協議接入-》EDP,通過edp協議完成控制命令的下發(下發開/關燈命令)、數據流信息的上傳(燈的開/關狀態)等通信流程。EDP (Enhanced Device Protocol增強設備協議)是OneNET平臺根據物聯網特點專門定製的完全公開的基於TCP的協議,可以廣泛應用到家居、交通、物流、能源以及其他行業應用中。
  • 開源軟體分享-基於.net core 3.1的快速開發框架
    不過現在.net core誕生以後,.net的生態也越來越好了,各種開源社區在為豐富.net生態世界努力。Vue.NetCore以前在github上搜索這種前後端分離快速開發框架基本是java的(如jeecg、jeesite、ruoyi),今天我要介紹的是一個基於.net core 3.1
  • ASP.NET動態網站開發試題與答案B卷
    2、在Asp.net中所有的自定義用戶控制項都必須繼承自____________________________。 3、當類T只聲明了私有實例構造函數時,則在T的程序文本外部,_________(可以or不可以)從T派生出新的類,__________直接創建T的任何實例。
  • swagger-editor編寫好api文檔在哪用?這個工具你得了解
    我們知道使用swagger-editor這個工具一般有兩種方法,一種呢是將swagger-editor工具加入到我們的工程文件中,使用代碼自動生成api文檔,這種一般通過項目部署,當伺服器啟動之後團隊成員可以通過項目地址訪問到文檔。這種是很方便的,但是不是每一個項目都需要這麼做。
  • ...增強一:使用MetaDescription,MetaKeywords,RedirectPermanant等
    使用Response.RedirectPermanent告訴搜尋引擎當前地址已經永久重定向了在HttpResponse中新添加了RedirectPermanant方法和RedirectToRoutePermanent方法,這兩個方法都可以實現301重定向,用來告訴搜素引擎當前訪問的內容已經永久的移動到了另一個地址,這在程序改版修改了url規則時非常有用,使用舉例如下:
  • .Net Core 會逆襲成為最受歡迎開發平臺嗎?
    部署靈活:可以包含在應用或已安裝的並行(用戶或系統範圍安裝)中。NuGet 包在遷移之前,需要確認引用的.Net 標準庫是否在.Net Core中支持或丟棄,如果不支持的話,就需要考慮如何用新的包代替或者當前功能的重構。.Net 標準包是在.Net 4.6.1 和.Net Core 中都可使用的,所以只需要可以使用該技術升級舊的PCL。
  • MPLS-VPN簡介 - 51CTO.COM
    MPLS-VPN使用到的一些名詞:PE:運營商網絡的邊界路由器P:運營商內部的路由器CE:客戶網絡的邊界路由器VRF:運營商為確保客戶信息的安全性為每個VPN用戶單獨分配一個路由表,即VRFRD:VPN網絡在運營商網絡內傳輸時如何辨別該路由屬於哪個VPN?
  • 在鴻蒙系統上使用MQTT編程
    想了解更多內容,請訪問:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz我們使用的是paho mqtt軟體包,這裡介紹一下怎麼使用關於鴻蒙系統的mqtt移植好的軟體包,相關github連結如下:https://gitee.com/qidiyun/harmony_mqtt這裡提供一個簡單的編程示例:這裡我們使用MQTTClient編程模型,他支持多任務多線程,非常適合用在鴻蒙系統上。
  • Graphcore IPU-M2000在基準測試中性能卓越
    在各種流行的模型中,Graphcore技術在訓練和推理方面均顯著優於NVIDIA的A100(基於DGX)。Graphcore為阿里雲HALO定製代碼正式在GitHub開源Graphcore是阿里雲HALO的合作夥伴之一,為阿里雲HALO定製開發的代碼odla_PopArt已經在HALO的GitHub上開源,具體請見https://github.com/alibaba/heterogeneity-aware-lowering-and-optimization
  • 在ASP.NET Web應用程式中使用C#的選擇語句if和switch
    2.if選擇語句2.1. if單分支選擇結構在C#中,當使用if表示單分支選擇結構時,只有在if條件表達式的值為true時才會執行花括號中的語句塊。If單分支選擇結構是不帶else的。if…else雙分支選擇結構在C#中,使用if…else表示雙分支選擇結構,當if後面的條件表達式的值為true時,執行if下面的花括號中的代碼,否則執行else下面的花括號中的代碼。
  • 如何掌握動態規划算法的套路? - 51CTO.COM
    在運籌學中,動態規劃是的非常重要的內容,在各個行業領域都有著廣泛的應用。我們如何理解動態規劃?如果一個問題的最優解可以通過其子問題的最優解經過推導得到,那麼,我們就可以先求出其子問題的最優解,根據子問題的解得出原問題的最優解。
  • ...投訴51CTO學院:北京無憂創想信息技術有限公司旗下51CTO學院ACI...
    2019年12月12日 14:45,張女士發起對51CTO學院的投訴。截止發稿前,51CTO學院有效投訴33次。
  • Graphcore IPU-M2000在首個benchmark測試中顯著優於GPU
    Graphcore為阿里雲HALO定製代碼正式在GitHub開源Graphcore是阿里雲HALO的合作夥伴之一,為阿里雲HALO定製開發的代碼odla_PopArt已經在HALO的GitHub上開源,具體請見 https://github.com/alibaba/heterogeneity-aware-lowering-and-optimization
  • .NetCore 中的Span
    廣告收入提升超 50%,快手如何在海外「異軍突起」>>>
  • SourceForge.NET 使用的開源軟體
    這篇文章介紹了SourceForge.NET 使用的開源軟體,各位不妨看一看