.NET Core 中 Swagger 配置詳解:常用配置與實戰技巧

隨著微服務架構和 RESTful API 的廣泛應用,API 文檔的管理和自動化生成成為了開發中的重要部分。Swagger(現為 OpenAPI)是一款功能強大的工具,它可以自動生成 API 文檔,并提供交互式 UI,幫助開發者、測試人員、前端開發人員等更高效地使用和測試 API。在 .NET Core 中,Swagger 的集成和配置非常簡便,通過 Swashbuckle.AspNetCore 包,我們能夠輕松地實現 API 文檔的自動生成與展示。

本文將圍繞 .NET Core 中 Swagger 的常用配置 進行詳細講解,涵蓋從基礎配置到一些常見的高級定制,包括多版本支持、認證配置、隱藏 API、API 路徑過濾等常見場景。希望通過本文,您能快速掌握如何在 .NET Core 中靈活地配置 Swagger。


1. 啟用 Swagger 的基本功能

首先,創建一個新的 .NET Core 項目并安裝 Swashbuckle.AspNetCore 包:

dotnet add package Swashbuckle.AspNetCore

安裝完成后,我們需要在項目中配置 Swagger。通常的基礎配置包含:

  • 注冊 Swagger 服務

  • 啟用 Swagger UI

配置代碼

var builder = WebApplication.CreateBuilder(args);// 注冊 Swagger 服務
builder.Services.AddSwaggerGen(c =>
{c.SwaggerDoc("v1", new OpenApiInfo{Title = "智慧OA系統 API",Version = "v1",Description = "這是智慧OA系統的 API 文檔",});// 啟用 XML 注釋,Swagger 會展示注釋內容var xmlFile = Path.Combine(AppContext.BaseDirectory, "智慧OA系統.xml");c.IncludeXmlComments(xmlFile);
});var app = builder.Build();// 啟用 Swagger 和 Swagger UI
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "智慧OA系統 API v1");c.RoutePrefix = string.Empty;  // 設置 Swagger UI 路徑});
}app.MapControllers();
app.Run();

解析

  • builder.Services.AddSwaggerGen 中,我們定義了 API 的元數據,如標題、版本、描述等。

  • 通過 app.UseSwagger() 啟用 Swagger,app.UseSwaggerUI() 啟用交互式 Swagger UI,方便開發者直接在瀏覽器中查看和測試 API。


2. 啟用多版本 API 文檔

在實際開發中,API 會隨著時間的推移不斷進行版本更新。為了方便管理,我們需要為不同版本的 API 提供獨立的 Swagger 文檔。例如,假設我們有 v1v2 兩個版本的 API。

配置代碼

builder.Services.AddSwaggerGen(c =>
{c.SwaggerDoc("v1", new OpenApiInfo { Title = "智慧OA系統 v1", Version = "v1" });c.SwaggerDoc("v2", new OpenApiInfo { Title = "智慧OA系統 v2", Version = "v2" });
});app.UseSwaggerUI(c =>
{c.SwaggerEndpoint("/swagger/v1/swagger.json", "智慧OA系統 v1");c.SwaggerEndpoint("/swagger/v2/swagger.json", "智慧OA系統 v2");
});

解析

  • 通過 AddSwaggerGen 配置多個版本的 API 文檔。

  • 使用 UseSwaggerUI 為每個版本提供獨立的 Swagger 端點,允許前端開發人員選擇需要使用的 API 版本。


3. API 安全性設置(JWT 認證)

在許多現代應用中,JWT(JSON Web Token)認證已成為一種常見的身份驗證方式。通過 Swagger,我們可以讓開發者方便地在 Swagger UI 中輸入 JWT Token,從而測試需要認證的 API。

配置代碼

builder.Services.AddSwaggerGen(c =>
{c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme{In = ParameterLocation.Header,Name = "Authorization",Type = SecuritySchemeType.ApiKey,Scheme = "Bearer",BearerFormat = "JWT",Description = "請輸入JWT Token進行認證"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference{Type = ReferenceType.SecurityScheme,Id = "Bearer"}},new string[] {}}});
});

解析

  • AddSecurityDefinition 配置了 Swagger 如何接受 API 的認證信息,這里使用了 Bearer 方案,即在請求頭中傳遞 JWT Token。

  • AddSecurityRequirement 設置了所有 API 請求都需要提供認證信息。

在 Swagger UI 中,用戶可以通過輸入 JWT Token 來進行身份認證和測試。


4. Basic 認證配置

除了 JWT 認證,Basic 認證也是一種常見的認證方式。在某些項目中,你可能需要使用 Basic 認證來保護 API。

配置代碼

builder.Services.AddSwaggerGen(c =>
{c.AddSecurityDefinition("Basic", new OpenApiSecurityScheme{In = ParameterLocation.Header,Name = "Authorization",Type = SecuritySchemeType.Http,Scheme = "basic",Description = "Basic Authentication"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference{Type = ReferenceType.SecurityScheme,Id = "Basic"}},new string[] {}}});
});

解析

  • 通過配置 Basic 認證,我們可以在 Swagger UI 中提供用戶名和密碼來進行 Basic 認證。

  • 這種方式適用于不使用 JWT 的傳統認證場景。


5. 隱藏某些 API 或控制器

在開發中,通常有一些 API 是僅供內部使用的,或者是某些需要隱藏的 API。這時我們可以通過 ApiExplorerSettings 特性將這些 API 從 Swagger 文檔中排除。

配置代碼

[ApiExplorerSettings(IgnoreApi = true)]
[Route("api/[controller]")]
public class InternalController : ControllerBase
{[HttpGet]public IActionResult GetInternalData(){return Ok("這是一個內部接口,Swagger 不會顯示");}
}

解析

  • 使用 ApiExplorerSettings(IgnoreApi = true) 特性標記某個控制器或方法,告訴 Swagger 忽略該 API。

  • 這對于那些僅供內部使用、且不想暴露的接口非常有用。


6. API 請求和響應模型文檔

Swagger 自動根據控制器方法的參數和返回類型生成文檔。在一些復雜的 API 中,你可能需要為請求和響應定義詳細的模型,這樣 Swagger 會根據模型的屬性生成文檔,幫助前端開發人員更好地理解如何調用 API。

配置代碼

public class RegisterRequest
{public string Username { get; set; }public string Password { get; set; }
}public class RegisterResponse
{public bool Success { get; set; }public string Message { get; set; }
}[HttpPost]
[Route("api/register")]
public IActionResult Register([FromBody] RegisterRequest request)
{var response = new RegisterResponse{Success = true,Message = "注冊成功"};return Ok(response);
}

解析

  • 使用 RegisterRequestRegisterResponse 模型,Swagger 會自動生成相應的文檔,描述請求體和響應體的結構。


7. 在生產環境中禁用 Swagger

為了安全起見,我們通常希望在生產環境中禁用 Swagger,防止暴露 API 文檔。你可以通過環境檢查來控制 Swagger 的啟用與禁用。

配置代碼

if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "智慧OA系統 API v1");});
}

解析

  • 通過 app.Environment.IsDevelopment() 來確保僅在開發環境中啟用 Swagger。


8. 自定義 Swagger UI 外觀

Swagger UI 提供了豐富的自定義選項,開發者可以根據自己的需求修改界面的標題、顯示請求時長等信息。

配置代碼

app.UseSwaggerUI(c =>
{c.SwaggerEndpoint("/swagger/v1/swagger.json", "智慧OA系統 API v1");c.RoutePrefix = string.Empty;c.DocumentTitle = "智慧OA系統 API 文檔";c.DisplayRequestDuration(); // 顯示請求的響應時間
});

解析

  • 通過 DocumentTitleDisplayRequestDuration 等選項自定義 Swagger UI 的外觀和行為。


9. 總結

在 .NET Core 中集成 Swagger

可以顯著提高 API 文檔的生成效率和使用體驗。通過本文所述的基本配置和常見的高級配置,您可以根據項目需求對 Swagger 進行定制,從而更好地管理 API 文檔和接口測試。

無論是多版本支持、認證配置、隱藏 API 還是自定義 Swagger UI,靈活使用這些功能可以幫助團隊提高開發效率,減少溝通成本,并確保 API 的正確使用。

希望這篇文章能夠幫助您在項目中更好地整合和配置 Swagger,提高開發體驗與文檔質量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81754.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

海康工業相機白平衡比選擇器對應的值被重置后,如何恢復原成像

做項目的時候,有時候手抖,一不小心把一個成熟穩定的項目的相機配置,重置了,如何進行恢復呢,在不知道之前配置數據的情況下。 我在做項目的時候,為了讓這個相機成像穩定一點,尤其是做顏色檢測時…

【八股戰神篇】Java虛擬機(JVM)高頻面試題

目錄 專欄簡介 一 請解釋Java虛擬機(JVM)及其主要功能 延伸 1. JVM的基本概念 2. JVM的主要功能 二 對象創建的過程了解嗎 延伸 1.Java 創建對象的四種常見方式 三 什么是雙親委派模型 延伸 1.雙親委派機制的作用: 2.雙親委派模型的核心思想: 3.雙親委派模型的…

win10 上刪除文件夾失敗的一個原因:sqlYog 備份/導出關聯了該文件夾

在嘗試刪除路徑為.../bak/sql的文件時,系統提示無權限操作。然而,關閉SQLyog后,刪除操作成功完成。這表明SQLyog可能正在占用該文件,導致刪除權限受限。關閉SQLyog后,文件被釋放,刪除操作得以順利進行。建議…

Oracle中如何解決LATCH:CACHE BUFFERS LRU CHAIN

簡單來講,Oracle為了高效管理BUFFER CACHE主要使用以下2種LRU列: ?LRU列,又叫替換列(replacement list),其中又分為主列和輔助列。 主列:已使用的緩沖區列,分為HOT和COLD區域。HOT區…

C++:迭代器

迭代器的本質&#xff1a;對象。 迭代器與指針類似&#xff0c;通過迭代器可以指向容器中的某個元素&#xff0c;還可以對元素進行操作。 迭代器統一規范了遍歷方式。不同的數據結構可以用統一的方式去遍歷。 接下來是一個自定義迭代器的代碼示例。 #include<iostream&g…

(4)Java虛擬線程與傳統線程對比

虛擬線程與傳統線程對比 &#x1f504; &#x1f4cb; 核心問題 Project Loom的虛擬線程與傳統線程在資源消耗上有何區別&#xff1f;如何設計一個支持百萬級并發的服務&#xff1f; &#x1f4ca; 資源消耗比較 &#x1f418; 傳統線程 &#x1f4cf; 每線程約1MB棧空間&am…

Java 單元測試框架比較:JUnit、TestNG 哪個更適合你?

Java 單元測試框架比較&#xff1a;JUnit、TestNG 哪個更適合你&#xff1f; 在 Java 開發領域&#xff0c;單元測試是保證代碼質量的重要環節。而選擇一個合適的單元測試框架&#xff0c;對于提升測試效率和代碼可靠性至關重要。本文將深入比較 JUnit 和 TestNG 這兩個主流的…

從零開始的抽獎系統創作(2)

我們接著進行抽獎系統的完善。 前面我們完成了 1.結構初始化&#xff08;統一結果返回之類的&#xff0c;還有包的分類&#xff09; 2.加密&#xff08;基于Hutool進行的對稱與非對稱加密&#xff09; 3.用戶注冊 接下來我們先完善一下結構&#xff08;統一異常處理&#…

【vs2022的C#窗體項目】打開運行+sql Server改為mysql數據庫+發布

1. vs2022打開運行原sql Server的C#窗體項目更改為mysql數據庫 1.1. vs2022安裝基礎模塊即可 安裝1??vs核心編輯器2??.net桌面開發必選&#xff0c;可選均不安裝&#xff01;&#xff01;&#xff01; 為了成功連接mysql數據庫&#xff0c;需要安裝組件NuGet包管理器 安…

AI 編程 “幻覺” 風險頻發?飛算 JavaAI 硬核技術筑牢安全防線

AI 技術已深度融入編程領域&#xff0c;為開發者帶來前所未有的便利與效率提升。然而&#xff0c;AI 編程 “幻覺” 問題如影隨形&#xff0c;頻頻引發困擾&#xff0c;成為阻礙行業穩健發展的潛在風險。飛算 JavaAI 憑借一系列硬核技術&#xff0c;強勢出擊&#xff0c;為攻克…

數據庫----軟考中級軟件設計師(自用學習筆記)

目錄 1、E-R圖 2、結構數據模型 3、數據庫的三級模式結構 4、關系代數 5、查詢 6、SQL控制語句 7、視圖?編輯 8、索引 9、關系模式 10、函數依賴 11、通過閉包求候選碼 12、范式 13、無損連接和保持函數依賴 14、數據庫設計 15、數據庫的控制功能 16、數據庫…

【Qt】Qt常見控件的相關知識點

1.close退出槽函數 2.設置快捷鍵&#xff0c;QMenu 。 適用&字母就能設置快捷鍵&#xff0c;運行qt程序&#xff0c;最后就可以按Alt對應的字母進行快捷操作。 3.QMenuBar內存泄露問題 如果ui已經自動生成了menubar&#xff0c;我們再次生成一個新的菜單欄&#xff0c;而…

httpx[http2] 和 httpx 的核心區別及使用場景如下

httpx[http2] 和 httpx 的核心區別在于 HTTP/2 協議支持&#xff0c;具體差異及使用場景如下&#xff1a; 1. 功能區別 命令/安裝方式協議支持額外依賴適用場景pip install httpx僅 HTTP/1.1無通用請求&#xff0c;輕量依賴pip install httpx[http2]支持 HTTP/2需安裝 h2>3…

Spring Boot 中 MyBatis 與 Spring Data JPA 的對比介紹

一、核心概念 MyBatis 定義&#xff1a;基于 SQL 的持久層框架&#xff0c;提供靈活的 SQL 映射和自定義查詢能力。 特點&#xff1a; 開發者手動編寫 SQL&#xff08;XML 或注解&#xff09;。 支持動態 SQL、復雜查詢優化。 輕量級&#xff0c;對數據庫控制力強。 Spri…

k8s1.27集群部署mysql8.0雙主雙從

環境介紹&#xff1a; #節點分配 159m--->兩個master&#xff0c;生產環境建議&#xff0c;一個master一個節點。 160n-->slave-0 161n-->slaves-0 #存儲卷 pv-->放在節點上&#xff0c;沒用nfs/云存儲。hostpath方式存儲。pv的資源分配1G&#xff0c;較小&#…

vivado fpga程序固化

一般下載到fpga上的程序在掉電之后就會丟失&#xff0c;如果想要掉電之后程序不丟失&#xff0c;就需要將比特流文件固化到板載的flash上。 以下以我的7a100t開發板為例&#xff0c;介紹程序固化的流程 點擊OK就可以下載了。

RabbitMQ Topic RPC

Topics(通配符模式) Topics 和Routing模式的區別是: topics 模式使?的交換機類型為topic(Routing模式使?的交換機類型為direct)topic 類型的交換機在匹配規則上進?了擴展, Binding Key?持通配符匹配(direct類型的交換機路 由規則是BindingKey和RoutingKey完全匹配) 在top…

服務器死機了需要檢查哪些問題

在這個數字化的時代&#xff0c;服務器就像是我們信息世界的“大管家”&#xff0c;可要是它突然死機了&#xff0c;那可真是讓人頭疼。今天咱們就來聊聊&#xff0c;服務器死機了&#xff0c;到底需要檢查哪些問題。 一、硬件問題 電源供應&#xff1a;檢查電源是否穩定&…

【MySQL成神之路】運算符總結

MySQL運算符總結 MySQL提供了豐富的運算符&#xff0c;用于在SQL語句中進行各種計算和比較操作。這些運算符可以分為算術運算符、比較運算符、邏輯運算符、位運算符等幾大類。合理使用這些運算符可以構建復雜的查詢條件和計算表達式。 一、算術運算符 MySQL支持基本的算術運…

自用Vscode 配置c++ debug環境

前言 使用vscode配置c debug環境的好處 1、可以借助vscode方便輕量的擴展和功能 2、避免了傳統使用gdb 復雜按鍵以及不夠直觀的可視化 3、方便一次運行&#xff0c;斷點處查看變量&#xff0c;降低找bug難度 4、某大公司項目采用類似配置&#xff0c;經過實踐檢驗 配置c運行環…