Swagger 从 .NET 9 中删除:有哪些替代方案

news2025/3/16 5:23:36

        微软已经放弃了对 .NET 9 中 Swagger UI 包 Swashbuckle 的支持。他们声称该项目“不再由社区所有者积极维护”并且“问题尚未得到解决”。

        这意味着当您使用 .NET 9 模板创建 Web API 时,您将不再拥有 UI 来测试您的 API 端点。

        我们将调查是否可以在 .NET 9 中使用 Swagger UI 以及是否有更好的替代方案。

创建 .NET 项目

    无论您使用 Visual Studio 创建 .NET 8 还是 .NET 9 Web API,您都可以选择启用 OpenAPI 支持。

在 Visual Studio 中创建 Web API 并启用 OpenAPI 支持

        当你启用它时,它将在Program.cs文件中配置 OpenAPI。但是,取决于你使用的版本,将取决于配置的内容。

.NET 8 中的 Swashbuckle

    这会将 Swashbuckle 配置到您的项目中。当您使用开发环境运行应用程序时,它将加载 Swagger UI,您可以在其中测试应用程序中的 API 端点。

在 .NET 8 中,ASP.NET Core Web API 中加载的 Swagger UI

        这是通过添加Swashbuckle.AspNetCoreNuGet 包并将以下代码行添加到Program.cs文件来配置的: 

// Program.cs
var builder = WebApplication.CreateBuilder(args);

...

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

...

app.Run();

.NET 9 的情况截然不同

    但是,当你使用 .NET 9 创建 ASP.NET Core Web API 时,它只会添加引用 OpenAPI 的扩展方法:

// Program.cs
var builder = WebApplication.CreateBuilder(args);

...

builder.Services.AddOpenApi();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
}

...

app.Run();

        没有对 Swagger 的引用,并且 Swagger UI 链接给您 404 Not Found 错误响应。

在 .NET 9 中找不到 Swagger UI

        这意味着您无法默认测试 API 端点。唯一添加的是 OpenAPI JSON 文档,您可以从 获得 /openapi/v1.json。 

在 .NET 9 中创建 Web API 项目时仅添加 OpenAPI 文档

替代方案

    随着 Swashbuckle 的消失,您还可以通过哪些其他方式测试应用程序中的 API 端点?

Postman

    Postman 是一个很好的选择,因为它可以轻松测试多个环境。由于 .NET 9 Web API 提供了 OpenAPI JSON 文档,我们可以使用该链接在 Postman 中导入端点。

    为此,请打开左上角的菜单,然后转到文件和导入。粘贴 OpenAPI JSON 文档中的 URL,即https://localhost:{portnumber}/openapi/v1.json。

    当您执行此操作时,它将添加一个集合并保存从 OpenAPI JSON 文档添加的所有 API 端点。

使用 Postman 测试 ASP.NET Core Web API 端点 

    它还将基本 URL 添加为变量,使在多个环境中测试变得更加容易。{{baseUrl}}测试不同环境时只需更新变量即可。

    此外,它还可以阻止您在应用程序中意外暴露 API 端点。

NSwag

    如果您想在应用程序内测试 API 端点,则可以使用NSwag。 NSwag 能够像 Swashbuckle 一样提供 Swagger UI,因此您将看到类似的 UI。

    首先,您需要将NSwag.AspNetCoreNuGet 包添加到您的应用程序中。之后,您需要UseSwaggerUi在 中调用扩展方法Program.cs。但是,您需要指定 OpenAPI JSON 文档的路径,即 openapi/v1.json。请注意,开头没有正斜杠。

// Program.cs
var builder = WebApplication.CreateBuilder(args);

...

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
    app.UseSwaggerUi(options =>
    {
        options.DocumentPath = "openapi/v1.json";
    });
}

...

app.Run();

        当您运行应用程序并指向时/swagger,您将看到与 Swashbuckle 非常相似的 Swagger UI。 

使用 Swagger UI 在 .NET 9 Web API 中使用 NSwag 

        此外,NSwag 还提供NSwagStudio,它允许您导入 OpenAPI JSON 文档并从中生成 C# 代码。如果您正在调用外部 API 并需要生成代码来调用它,这将非常有用。

只需添加 Swashbuckle 即可

    值得注意的是,Swashbuckle 仍可在 .NET 9 项目中运行,并且您可以轻松配置它。确保将Swashbuckle.AspNetCore NuGet 包添加到您的项目中,然后将 SwaggerUI 配置添加到您的 .NET 9 项目中Program.cs: 

// Program.cs
var builder = WebApplication.CreateBuilder(args);

...

builder.Services.AddEndpointsApiExplorer(); // <!-- Add this line
builder.Services.AddSwaggerGen(); // <!-- Add this line

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger(); // <!-- Add this line
    app.UseSwaggerUI(); // <!-- Add this line
}

...

app.Run();

        当您运行应用程序并转到时/swagger,它将使用 Swashbuckle 显示原始 Swagger UI,并允许您测试 API 端点。

Scalar:更好的 API 测试体验

    但是微软放弃 Swagger UI 是有原因的,如果你使用 Scalar,你可能会看到这一点。Scalar 提供了更好的 UI 设计,它更易于配置,允许你生成代码以使用多种不同的编程语言调用 API 端点,并允许你向请求添加 cookie、标头和查询参数。

使用 Scalar 测试 ASP.NET Core Web API 端点

要配置它,请添加Scalar.AspNetCoreNuGet 包,然后将以下行添加到您的Program.cs文件中:
// Program.cs
var builder = WebApplication.CreateBuilder(args);

...

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
    app.MapScalarApiReference(); // <-- Add this line
}

...

app.Run();

/scalar/v1您可以在运行应用程序时查看 Scalar UI 。

它还允许您配置 Scalar UI 的外观和行为,例如更改标题名称、主题以及是否显示侧边栏。

// Program.cs
using Scalar.AspNetCore;

var builder = WebApplication.CreateBuilder(args);

...

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
    app.MapScalarApiReference(options => 
    {
        options.WithTitle("My API");
        options.WithTheme(ScalarTheme.BluePlanet);
        options.WithSidebar(false);    
    });
}

...
app.Run();

将 Scalar UI 与 BluePlanet 主题结合使用

希望这篇文章对您有所帮助。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2315801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…

使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法

使用DeepSeek和墨刀AI&#xff0c;写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整&#xff1f; 还是按以前的思路写PRD&#xff0c;就还是以前的样子。 现在AI这么强大&#xff0c;产品经理如何使用DeepSeek写PRD文档&#xff0c;产品经…

【VUE2】第五期——VueCli创建项目、Vuex多组件共享数据、json-server——模拟服务端api

黑马程序员视频地址&#xff1a;091-vuex的基本认知_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV4y1a7n4?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p91 目录 1 VueCli 自定义创建项目 2 Eslint代码规范 2.1 规…

rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64

在我在Linux中安装离线CAN工具时&#xff0c;出现了一个问题&#xff0c; rootwanghuo:~# rpm -ivh can-uilts-v2019.00.0-alt1.aarch64.rpm error: Failed dependencies:rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64 意思是尝试安装 can-uilts-v20…

CNN 稠密任务经典结构

FCN UNet FPN FCNUNETFPNpadding无&#xff08;逐渐变小&#xff09; 有&#xff08;左右对称&#xff09;上采样 双线性双线性 最近邻跳跃链接 相加 Cropcat 1x1卷积相加 三个网络差不多&#xff0c;UNet名字最直观&#xff0c;后续流传…

算法刷题整理合集(二)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

STM32配套程序接线图

1 工程模板 2 LED闪烁 3LED流水灯 4蜂鸣器 5按键控制LED 6光敏传感器控制蜂鸣器 7OLED显示屏 8对射式红外传感器计次 9旋转编码器计次 10 定时器定时中断 11定时器外部时钟 12PWM驱动LED呼吸灯 13 PWM驱动舵机 14 PWM驱动直流电机 15输入捕获模式测频率 16PWMI模式测频率占空…

Houdini学习笔记

1. Houdini中一次只能显示一个物体 如果要都显示 需要 merge 节点 粉色的是 以参考显示 2.对任意一个节点按F1 可以弹出houdini官方文档 3. 恢复视角 Space H,居中 Space G 居中选中物体

仿Ant Design Vue风格自定义浏览器滚动条样式

仿Ant Design Vue风格自定义浏览器滚动条样式 问题原因 浏览器默认的滚动条样式很丑&#xff0c;无法满足需求&#xff0c;需要自定义滚动条样式&#xff0c;参考ant-design-vue的样式 css修改滚动相关属性可查阅官方文档 选择器介绍 ::webkit-scrollbar&#xff1a;滚动条…

单元测试、系统测试、集成测试、回归测试的步骤、优点、缺点、注意点梳理说明

单元测试、系统测试、集成测试、回归测试的梳理说明 单元测试 步骤&#xff1a; 编写测试用例&#xff0c;覆盖代码的各个分支和边界条件。使用测试框架&#xff08;如JUnit、NUnit&#xff09;执行测试。检查测试结果&#xff0c;确保代码按预期运行。修复发现的缺陷并重新测…

网络安全反渗透 网络安全攻防渗透

网络渗透防范主要从两个方面来进行防范&#xff0c;一方面是从思想意识上进行防范&#xff0c;另一方面就是从技术方面来进行防范。 1.从思想意识上防范渗透 网络攻击与网络安全防御是正反两个方面&#xff0c;纵观容易出现网络安全事故或者事件的公司和个人&#xff0c;在这些…

《GitHub网路访问不稳定:解决办法》:此文为AI自动生成

《GitHub网路访问不稳定&#xff1a;解决办法》&#xff1a;此文为AI自动生成 GitHub 网路访问不稳定初现 在当今数字化时代&#xff0c;软件开发行业蓬勃发展&#xff0c;GitHub 作为全球最大的代码托管平台&#xff0c;已然成为无数开发者不可或缺的 “宝库”。它不仅汇聚了…

G-Star 公益行 | 温暖相约 3.30 上海「开源×AI 赋能公益」Meetup

你是否曾想过&#xff0c;在这个数字化浪潮席卷的时代&#xff0c;公益组织如何突破技术瓶颈&#xff1f;当 AI 成为热门话题&#xff0c;它能为公益事业带来怎样的温度&#xff1f;开源的力量&#xff0c;如何让每一份善意都拥有无限可能&#xff1f; G-Star 公益行&#xff…

docker pull 镜像问题

问题一&#xff1a;pull镜像报错:time out 分析&#xff1a;源问题&#xff0c;网络不稳定&#xff0c;更换加速源&#xff0c;地址&#xff1a;/etc/docker/daemon.json 解决&#xff1a;更换地址&#xff0c;如下&#xff0c;然后敲&#xff1a;docker daemon-reload &&…

STAR Decomposition 一种针对极端事件的信号分解方法 论文精读加复现

STAR 分解&#x1f680; 在时序预测任务中&#xff0c;为了情绪化信号的各种成分&#xff0c;例如趋势信息季节信息等往往都需要对信号进行分解。目前熟知的分解方式有很多种&#xff0c;经验模态分解 EMD 变分模态分解 VMD &#xff0c;还有 集合经验模态分解 EEMD&#xff0c…

基于SpringBoot + Vue 的房屋租赁系统

基于springboot的房屋租赁管理系统-带万字文档 SpringBootVue房屋租赁管理系统 送文档 本项目有前台和后台两部分、多角色模块、不同角色权限不一样 共分三种角色&#xff1a;用户、管理员、房东 管理员&#xff1a;个人中心、房屋类型管理、房屋信息管理、预约看房管理、合…

Excel中国式排名,3种方法!

大家好&#xff0c;我是小鱼。 什么是中国式排名呢&#xff1f; 举个例子比如说公司一共有10名员工进行成绩考核&#xff0c;如果9个人考核成绩都是90分&#xff0c;你是89分&#xff0c;按照国际惯用的排名法则&#xff1a;9 个人考核成绩并列第一&#xff0c;你第10名&…

Flutter:跑马灯公告栏

组件 import dart:async; import package:flutter/material.dart; import package:ducafe_ui_core/ducafe_ui_core.dart;class MarqueeNotice extends StatefulWidget {/// 公告数据列表&#xff0c;每条公告包含title和descfinal List<Map<String, String>> notic…

Jmeter下载及环境配置

Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/ 注意&#xff1a;需要自己注册账号 下载完成&#xff0c;解压后的目录为&#xff1a; …

【初级篇】如何使用DeepSeek和Dify构建高效的企业级智能客服系统

在当今数字化时代,企业面临着日益增长的客户服务需求。使用Dify创建智能客服不仅能够提升客户体验,还能显著提高企业的运营效率。关于DIfy的安装部署,大家可以参考之前的文章: 【入门级篇】Dify安装+DeepSeek模型配置保姆级教程_mindie dify deepseek-CSDN博客 AI智能客服…