首页 > 编程语言 >NET9 Asp.net Core将整合OpenAPI的文档生成功能而无需三方库

NET9 Asp.net Core将整合OpenAPI的文档生成功能而无需三方库

时间:2024-07-18 20:41:09浏览次数:15  
标签:Core Asp app OpenAPI API 文档 NET9 NET

OpenAPI 规范是用于描述 HTTP API 的标准。该标准允许开发人员定义 API 的形状,这些 API 可以插入到客户端生成器、服务器生成器、测试工具、文档等中。尽管该标准具有普遍性和普遍性,但 ASP.NET Core 在框架内默认不提供对 OpenAPI 的支持。

当前 ASP.NET Core 不提供对 OpenAPI 的内置支持。不过内置支持了 ApiExplorer 这是一个有用的抽象,它提供有关在应用程序中注册的路由的元数据。此元数据可通过 DI 容器访问,并由生态系统中的工具(如 Asp.Api.Versioning、NSwag 和 Swashbuckle)通过ApiExplorer查询聚合的metadata

在 .NET 6 中,引入了Minimal Api,并通过 EndpointMetadataApiDescriptionProvider 添加了对Minimal Api的支持,这允许ApiExplorer查询metadata并注册这些api的Endpoint。

在 .NET 7 中,引入了Microsoft.AspNetCore.OpenApi(注意:此包通过 NuGet 提供,不是shared framework 成员)。WithOpenApi扩展 公开了用于修改Minimal API 中与单个Endpoint关联的扩展方法。该包依赖于 Microsoft.OpenApi 包,提供对象模型和反序列化程序/序列化程序,用于与各种版本的 OpenAPI 规范进行交互。

为了解决三方库兼容的问题并为用户提供更无缝的体验(当前三方库还用ntj处理JSON序列化,估计这个微软就不能忍),在NET9以后的版本中,AspnetCore团队将OpenAPI文档生成作为 ASP.NET Core 的内置功能。

我们用VS最新预览版创建一个NET9的 WebApi项目 名为SwaggerBye (#.#),引用Microsoft.AspNetCore.OpenApi库(当前最新的预览版是:9.0.0-preview.4.24267.6) 然后简单的敲击以下代码:

builder.Services.AddOpenApi();
var app = builder.Build();
app.MapOpenApi();//生成文档的Endpoint

var summaries = new[]
{
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
    {
        var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                (
                    DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    Random.Shared.Next(-20, 55),
                    summaries[Random.Shared.Next(summaries.Length)]
                ))
            .ToArray();
        return forecast;
    })
    .WithName("GetWeatherForecast")
    .WithOpenApi();

app.MapMethods("hello/{world}", ["GET"],
    (string world) => { return Results.Json(new HelloDto(world)); })
    .WithOpenApi()
    .Produces<HelloDto>(200);

然后我们访问 ~/openapi/v1.json 就可以看到生成的scheme文档了:
image

当然只有Scheme文档可能还不够,我们可以扩展一个ScalarUI挂载文档,当然有兴趣也可以用SwaggerUI :

public static IEndpointConventionBuilder MapScalarUi(this IEndpointRouteBuilder endpoints)
{
	return endpoints.MapGet("/scalar/{documentName}", (string documentName) => Results.Content($$"""
<!doctype html>
<html>
<head>
<title>Scalar API Reference -- {{documentName}}</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1" />
</head>
<body>
<script
id="api-reference"
data-url="/openapi/{{documentName}}.json"></script>
<script>
var configuration = {
theme: 'purple',
}

document.getElementById('api-reference').dataset.configuration =
JSON.stringify(configuration)
</script>
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
</body>
</html>
""", "text/html")).ExcludeFromDescription();
}

然后调用MapScalarUi()扩展

if (app.Environment.IsDevelopment())
{
    app.MapScalarUi();
}

最后我们访问 ~/scalar/v1
image

太帅了,我们只用了几行代码就完整的实现文档工具的所有功能,以后可以有更多的时间摸鱼了,不得不为巨硬 点一个大大的赞!

最后呢这属于NET9+的叠加功能,因此在NET8下是不可用的,如果想赶在年底体验 可以下载VS的最新预览版和NET9的preview4 SDK.

另外我也发现当前生成文档还存在一丝丝BUG,比如MinimalApi返回了ValidationProblem定义,文档生成器会报错,后续正式版发布这些问题应该都会解决~

最后呢,巨硬都把事干完了,三方库还有什么活路

 

2024-07-18 20:37:24【出处】:https://www.cnblogs.com/vipwan/p/18210947

=======================================================================================

标签:Core,Asp,app,OpenAPI,API,文档,NET9,NET
From: https://www.cnblogs.com/mq0036/p/18310409

相关文章

  • 无法在 Rasp pi 4B 上安装 python 库
    :~$sudopipinstall序列号错误:外部管理环境×该环境是外部管理的╰─>要在系统范围内安装Python软件包,请尝试aptinstallpython3-xyz,其中xyz是您要尝试的包安装。Ifyouwishtoinstallanon-Debian-packagedPythonpackage,createavirtualenvironme......
  • K3s 修改 CoreDNS 配置,持久生效
    K3s启动后,会自动帮我们安装好CoreDNS,不需要手动安装。如果你想修改CoreDNS的配置,常用的有两种方式:直接修改CoreDNS的configmap来调整CoreDNS的参数,例如:kubectl-nkube-systemeditconfigmapcoredns修改K3smanifests中的CoreDNS配置文件,文件位置:/var/lib/r......
  • NATS: Aspire.NATS.Net 库
    NuGetAspire.NATS.Net快速入门首先,你需要已经配置了NATS服务器,并且知道访问这个服务器的URL地址。安装NuGet使用你熟悉的方式安装NuGet库dotnetaddpackageAspire.NATS.Net使用示例在项目的Program.cs中,调用AddNatsClient()扩展方法以在依赖注入容器中注......
  • 升级TrinityCore 服务器硬件
    升级服务器原服务器:Ubuntu装VirtualBox装Ubuntu虚拟机原配置:内存1756MB内核4外接硬盘 ip192.168.0.12升级服务器:FreeBSD装bhyve装Ubuntu虚拟机新配置:内存3072MB内核4 ssd硬盘 ip192.168.1.12 除了ssh,服务器还开了VNC,要通过宿主机连上:vncvierer192.168.1.5:5......
  • ASP.NET 应用程序添加 Swagger
    废话不多说,上教程。......
  • 论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(上)
    前言数据库并发,数据审计和软删除一直是数据持久化方面的经典问题。早些时候,这些工作需要手写复杂的SQL或者通过存储过程和触发器实现。手写复杂SQL对软件可维护性构成了相当大的挑战,随着SQL字数的变多,用到的嵌套和复杂语法增加,可读性和可维护性的难度是几何级暴涨。因此如何在实......
  • 【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务
    目录0.简介1.环境2.知识点3.详细过程1)创建空项目2)添加Web表单3)使用Web表单的GUI设计4)添加服务引用5)在Web的button函数中调用服务,获取PI值6)测试0.简介本文属于一个系列中的第二篇文章,这个系列会实现一个项目,这个项目主要使用VisualStudio2019作为开发工具,创建WC......
  • F1-score(标准度量)
    什么是F1-score?F1分数(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0,如公式1所示。公式1计算过程TP(TruePositive):预测答案正确FP(FalsePositive):错将其他类......
  • NETCORE -MinIO的基本使用
    NETCORE-MinIO的基本使用 环境:.net6+miniominio服务部署:https://www.cnblogs.com/1285026182YUAN/p/18308075 一. 创建net6项目二. 安装minionuget包 三.在appsetting.json配置文件中设置MinIO配置 {"Logging":{"LogLevel":{......
  • asp.net 动态加载与卸载程序集的尝试(没有成功)欢迎解决的朋友留言告知
    参考 C#.Net如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集-龙骑科技-博客园(cnblogs.com)大概意思是微软的.NET运行不支持直接卸载应用程序集,因为一旦加载程序集,即使是动态加载就会给该程序集加载到当前正在运行的主线程上,如果想......