ASP.NET Web API 中使用 swagger 來管理 API 文檔

来源:https://www.cnblogs.com/lifefriend/archive/2019/01/01/10205810.html
-Advertisement-
Play Games

本文以 ASP.NET Web API 為後臺框架,利用 EF6 連接 postgreSQL 資料庫,使用 swagger 來生成 REST APIs文檔。文章分二個部分,第一部分主要講如何用 EF6 連接 postgreSQL,第二部分是介紹如何集成 swagger,如何屏蔽 swagger 預設 ...


 

本文以 ASP.NET Web API 為後臺框架,利用 EF6 連接 postgreSQL 資料庫,使用 swagger 來生成 REST APIs文檔。文章分二個部分,第一部分主要講如何用 EF6 連接 postgreSQL,第二部分是介紹如何集成 swagger,如何屏蔽 swagger 預設自帶的介面說明。

 

一、EF6 連接 postgreSQL 

(1)使用 NuGet 安裝 Npgsql.EntityFramework

在VS的程式包管理控制台輸入如下命令

Install-Package Npgsql.EntityFramework

(2)配置 Web.config

利用 NuGet 安裝的 EntityFramework,大部分配置都會自動在 Web.config 中生成,但卻不會生成 DbProviderFactories,咱們手動把 DbProviderFactories 加上。資料庫的連接信息也需要手動配置,在這裡一併配置。配置如下:

 1 <system.data>
 2     <DbProviderFactories>
 3         <remove invariant="Npgsql" />
 4         <add name="Npgsql" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
 5     </DbProviderFactories>
 6 </system.data>
 7 <connectionStrings>
 8     <!--  資料庫連接字元串, 包含主機,埠,用戶,密碼 -->
 9     <add name="DbConn" connectionString="Server=localhost;Port=5432;User Id=postgres; Password = postgres; Database=postgres" providerName="Npgsql"/>
10 </connectionStrings>

(3)新建 資料庫上下文(DbContext)類

 1 // 資料庫上下文 DB.cs
 2 public class DB : DbContext
 3 {
 4     public DB() : base("name = DbConn") {}
 5     protected override void OnModelCreating(DbModelBuilder modelBuilder)
 6     {
 7         //設置 EF 的預設schema
 8         modelBuilder.HasDefaultSchema("public");
 9     }
10     // 實體類 (demo為表名)
11     public virtual DbSet<demo> demo { get; set; }
12 }

(4)新建實體類 demo

1 public class demo
2 {
3     [Key]
4     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
5     public string id { get; set; }
6 
7     [Required]
8     public string name { get; set; }
9 }

(5)改寫 ValuesController

1 public List<demo> Get()
2 {
3     using (DB db = new DB())
4     {
5         return db.demo.ToList();
6     }
7 }

(7)測試數據連接是否正常

瀏覽器中輸入 http://localhost:46665/api/Values,如果能看到有資料庫中的數據返回,表示數據訪問正常。

 

二、集成 swagger

 (1)安裝  swagger

Install-Package Swashbuckle

(2)配置 xml 生成 路徑

選中項目—>右鍵—>項目屬性—>生成—>勾選(XML文檔文件)—>保存

(3)查看結果 

   瀏覽器中輸入 http://localhost:46665/swagger/ui/index

   PS:運行中如果出現錯誤,找到 SwaggerNet 類,註釋類上面的兩行       

// [assembly: WebActivator.PreApplicationStartMethod(typeof(webApi.App_Start.SwaggerNet), "PreStart")]
// [assembly: WebActivator.PostApplicationStartMethod(typeof(webApi.App_Start.SwaggerNet), "PostStart")]    

(4)swagger 中顯示介面註釋信息

 1 public class SwaggerConfig
 2 {
 3     public static void Register()
 4     {
 5         var thisAssembly = typeof(SwaggerConfig).Assembly;
 6 
 7         GlobalConfiguration.Configuration 
 8             .EnableSwagger(c =>{
 9                                c.SingleApiVersion("v1", "webApi");
10                                //添加XML解析
11                                //註意修改相應的XML名字
12                                c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory));
13              }).EnableSwaggerUi(c =>{});
14     }
15 }

 

到此,swagger 已經能生成文檔了,但這時候生成的文檔中會包含 swagger 預設自帶的介面,看起來有點彆扭。下麵介紹下屏蔽 swagger 預設自帶的介面。

在 SwaggerConfig 中添加 DocumentFilter。

 

 1 public class SwaggerConfig
 2 {
 3     public static void Register()
 4     {
 5         var thisAssembly = typeof(SwaggerConfig).Assembly;
 6 
 7         GlobalConfiguration.Configuration 
 8             .EnableSwagger(c =>{
 9                                c.SingleApiVersion("v1", "webApi");
10                                //添加XML解析
11                                //註意修改相應的XML名字
12                                c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory));
13                                // 介面過濾
14                                c.DocumentFilter<ApiFilter>();
15              }).EnableSwaggerUi(c =>{});
16     }
17 }
 1 // ApiFilter.cs
 2 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]   
 3 public partial class ApiAttribute : Attribute { }
 4 public class ApiFilter: IDocumentFilter
 5 {
 6     public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
 7     {
 8          foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
 9          {        
10             // url 過濾
11             var _key = "/" + apiDescription.RelativePath.TrimEnd('/');
12             if (_key.Contains("/api/Swagger") && swaggerDoc.paths.ContainsKey(_key))
13                swaggerDoc.paths.Remove(_key);
14           }
15     }
16 }

重新運行下,swagger 預設自帶的介面已經不見了。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是Hystrix,Hystrix如何使用 容錯框架Hystrix,SpringCloud將Hystrix整合到Netflix項目中了。它主要用來添加一個延遲的閥值和容錯邏輯。來幫助我們控制分散式系統之間的組件交互。 那麼什麼是延遲閥值呢:就拿下圖中的銷售模塊舉例,在銷售模塊調用會員模塊的時候,會 ...
  • 本文實例講述了PHP實現在資料庫百萬條數據中隨機獲取20條記錄的方法。PHP實例分享給大家供大家參考,具體如下:為什麼要寫這個?在去某個公司面試時,讓寫個演算法出來,當時就蒙了,我開發過程中用到演算法的嗎?又不是大數據開發,分析。今天偶然想起來一個坑爹數據,如:PHP取百萬條數據中隨機20條記錄,當時就 ...
  • 可能你只想簡單的使用,暫時不想瞭解太多的知識,那麼請看這裡,瞭解一下如何讀文件,寫文件 讀文件示例代碼 File file = new File("D:\\test\\t.txt"); //這裡的有兩條斜杠,其實實際的路徑為D:\test\t.txt,多的那一條斜杠是轉義用的 InputStream ...
  • 用Spring Data JPA操作資料庫 這份教程教你用Spring Data JPA從關係資料庫mysql中存儲和提取數據。總結來自https://spring.io/guides/gs/accessing-data-jpa/ 1.用Maven構建工程 添加依賴 <!-- spring boot ...
  • "裝飾器1:函數裝飾器" "裝飾器2:類裝飾器" "裝飾器3:進階" 本文是裝飾器相關內容的第二篇,關於類裝飾器。 "類裝飾器"有兩種解讀方式:用來裝飾類的裝飾器;類作為裝飾器裝飾其它東西。你如何認為取決於你,兩種說法都有出現在其它的文章中。我的文章中是將"類裝飾器"解讀為第一種方式,即裝飾類的東西 ...
  • 在Java中,介面是對類的一組需求描述,它相當於不同系統之間交互時使用的一種契約,實現了介面的類要遵從介面定義的規則。本文將詳細介紹有關介面的內容。 ...
  • 在上一章(Asp.Net Core 輕鬆學-多線程之Task快速上手)[https://www.cnblogs.com/viter/p/10201228.html]文章中,介紹了使用Task的各種常用場景,但是感覺有部分內容還沒有完善,在這裡補充一下。 ...
  • 介紹 Chart.js 這套 open source 的免費「圖表」繪製函式庫,及其與 ASP.NET MVC 的整合應用。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...