.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.mzph.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运行环…