当前位置:

首页 > 编程开发 > .NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理的过程详解

.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理的过程详解

.NET10的OpenApi与Asp.Versioningv10结合,实现URL路径API版本管理。配置默认版本与读取方式,为各版本生成独立OpenAPI文档,用Scalar库展示多版本文档。

本文目录

    为什么 API 版本管理如此重要?

    API 版本管理的核心目标其实很直接:在不破坏现有用户的前提下,持续迭代和改进 API。通过版本管理,我们可以做到:

    • 引入新功能:在新版本中添加字段、接口等,而不影响旧版本的用户。
    • 修复 bug:在新版本中修复问题,而不冒破坏旧版本的风险。
    • 逐步淘汰:在新版本中移除过时的功能,给用户足够的时间迁移。

    常见的版本策略主要有这么几种:

    • URL 路径版本:/api/v1/users,直观,最常见。
    • 查询参数版本:/api/users?api-version=1.0
    • 请求头版本:X-API-Version: 1.0
    • 媒体类型版本:Accept: application/json; v=1.0(GitHub 在用这种方式)

    每种方式都有适用场景,没有绝对的优劣之分。

    在 C# 生态中,长期以来的事实标准是 Swashbuckle.AspNetCore,但它并没有内置版本管理支持,需要配合 Asp.Versioning 来实现。终于,在 .NET 10 中,微软推出了自己的 OpenAPI 库 Microsoft.AspNetCore.OpenApi,并且 Asp.Versioning v10 也正式支持了这个库——版本管理和文档生成终于可以无缝结合了。

    上手 Microsoft.AspNetCore.OpenApi 和 Asp.Versioning

    要使用这两个库来实现 API 版本管理,首先需要安装相关的 NuGet 包:

    #package: Asp.Versioning.Http 10.0.0
    #package: Asp.Versioning.Mvc 10.0.0
    #package: Asp.Versioning.Mvc.ApiExplorer 10.0.0
    #package: Microsoft.AspNetCore.OpenApi 10.0.0
    #package: Scalar.AspNetCore 2.6.0

    安装完成后,在 Program.cs 中进行如下配置:

    services
        .AddApiVersioning(options =>
        {
            options.DefaultApiVersion = new ApiVersion(1, 0);
            options.AssumeDefaultVersionWhenUnspecified = true;
            options.ReportApiVersions = true;
            options.ApiVersionReader = new UrlSegmentApiVersionReader();
        })
        .AddMvc()
        .AddApiExplorer(options =>
        {
            options.GroupNameFormat = "'v'V";
            options.SubstituteApiVersionInUrl = true;
        });
    
    services.AddOpenApi("v1", options =>
    {
        options.ShouldInclude = apiDescription => apiDescription.GroupName == "v1";
    });
    
    services.AddOpenApi("v2", options =>
    {
        options.ShouldInclude = apiDescription => apiDescription.GroupName == "v2";
    });
    
    app.MapOpenApi();
    app.MapScalarApiReference(options =>
    {
        options
            .WithTitle("Users API - {documentName}")
            .AddDocuments(new[] { "v1", "v2" });
    });

    这块代码先配置了 API 版本管理——指定默认版本、版本读取方式等。然后为每个版本配置 OpenAPI 文档生成,确保各版本有独立的文档。最后映射 OpenAPI 和 Scalar API Reference 的路由。

    控制器方面,可以用特性来指定版本:

    [ApiController]
    [Route("api/v{version:apiVersion}/[controller]")]
    [ApiVersion("1.0")]
    public class UsersController : ControllerBase
    {
        [HttpGet]
        [MapToApiVersion("1.0")]
        public IActionResult GetV1()
        {
            return Ok(new { Version = "v1", Users = new[] { "Alice", "Bob" } });
        }
    }
    
    [ApiController]
    [Route("api/v{version:apiVersion}/[controller]")]
    [ApiVersion("2.0")]
    public class UsersV2Controller : ControllerBase
    {
        [HttpGet]
        [MapToApiVersion("2.0")]
        public IActionResult GetV2()
        {
            return Ok(new { Version = "v2", Users = new[] { "Alice", "Bob", "Charlie" } });
        }
    }

    通过以上配置,就实现了基于 URL 路径的 API 版本管理,每个版本都有独立的 OpenAPI 文档。

    这里还用了一个叫 Scalar 的库来生成 API 参考文档。Scalar 专注于生成 API 参考文档,支持多版本文档生成和定制化配置,可以轻松地为每个 API 版本生成漂亮的参考文档,方便开发者查阅。

    上一张 Scalar 的图(和本项目无关)

    .NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理的过程详解

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    圆通速递查单号官网
    圆通速递查单号官网

    圆通速递查单号官网在哪里? 不少朋友都在寻找圆通快递的官方物流查询入口。别急,这就为你揭晓答案,并带你详细了解它的核心功能与服务。 圆通速递的官方网站地址是:https://www.yto.net.cn/。记住这个地址,所有官方服务都从这里开始。 官网核心功能 来到官网,你会发现它的运单查询服务是全

    在小说搜搜找不到想看的小说怎么办?小说搜搜换源功能使用详解【必学】
    在小说搜搜找不到想看的小说怎么办?小说搜搜换源功能使用详解【必学】

    小说搜搜搜索不到结果?五种实用解决方法帮你搞定 在小说搜搜里搜不到想看的书?这事儿其实挺常见。问题多半出在书源上——要么是默认的书源还没来得及收录,要么是原先的源数据失效了,更新没跟上。别急,下面这五条解决路径,基本能覆盖绝大多数情况,操作起来也不复杂。 一、通过阅读页调出换源入口手动切换 这个方法

    来看小说网最新章节免费阅读网
    来看小说网最新章节免费阅读网

    来看小说网最新章节免费阅读网-来看小说网全网小说同步更新入口 不少资深书友都在问,来看小说网的全网小说同步更新入口究竟在哪?别急,答案就在这里。接下来,就为大家详细揭开这个平台的神秘面纱,看看它究竟提供了怎样的阅读体验。 来看小说网的官方入口是:https://www.kanxiaoshuo.net

    什么是面向接口编程、面向过程编程、面向对象编程?
    什么是面向接口编程、面向过程编程、面向对象编程?

    面向接口编程通过接口解耦,降低耦合度并提升可扩展性和维护性,是面向对象思想的精髓。面向过程编程将问题拆解为步骤,用函数依次执行。面向对象编程将事物抽象为对象,封装属性和方法,通过对象协作解决问题。

    C#怎么实现过滤器Filter_C# ASP.NET Core过滤器详解教程【进阶】
    C#怎么实现过滤器Filter_C# ASP.NET Core过滤器详解教程【进阶】

    ASP.NETCore过滤器需关注执行顺序、作用域与DI生命周期。接口实现需手动注册,特性继承更常用但需满足构造函数要求。全局注册时注意scoped服务注入问题,Order值须显式设置以控制同类型过滤器执行顺序。异常过滤器仅捕获操作方法内异常,模型绑定与授权失败须分别处理。

    C#怎么实现WebAPI异常处理 C#如何在ASP.NET Core中全局捕获异常返回统一错误信息【框架】
    C#怎么实现WebAPI异常处理 C#如何在ASP.NET Core中全局捕获异常返回统一错误信息【框架】

    ASP.NETCore中UseExceptionHandler需在UseRouting之后、UseEndpoints之前注册,开发环境需移除UseDeveloperExceptionPage,仅捕获请求生命周期异常。推荐使用ProblemDetails返回标准错误,自定义异常可通过类型判断返回差异化响应。异步操作必须显式await,否则异常无法被捕获。

    C#怎么创建gRPC服务_C# ASP.NET Core gRPC通信教程【高级】
    C#怎么创建gRPC服务_C# ASP.NET Core gRPC通信教程【高级】

    gRPC开发陷阱:服务类需继承GreeterBase并返回Task,由Grpc.Tools自动生成基类。MapGrpcService须在UseRouting后注册且仅支持HTTP/2。ServerCallContext获取取消信号,超时返回DeadlineExceeded。EnableDetailedErrors可获取错误详情,但生产环境应关闭。

    C#怎么使用IHostedLifecycle_C# .NET 8生命周期钩子教程【进阶】
    C#怎么使用IHostedLifecycle_C# .NET 8生命周期钩子教程【进阶】

    IHostedLifecycleService并非控制服务启动顺序的调度器,而是单个服务的生命周期钩子。OnStartedAsync在所有StartAsync完成后才触发且无序执行,适用于状态收尾或就绪广播,但需注意超时限制。控制启动依赖应使用显式信号而非钩子。

    C#怎么实现Quartz.NET持久化 C#如何将Quartz调度任务配置持久化到数据库防止丢失【框架】
    C#怎么实现Quartz.NET持久化 C#如何将Quartz调度任务配置持久化到数据库防止丢失【框架】

    Quartz.NET任务持久化需使用AdoJobStore将调度信息存入数据库,配置需指定数据库类型、连接字符串和方言,并执行官方建表脚本。表名前缀须一致,注意数据库事务支持与集群配置,避免因类型名变更导致反序列化失败。

    C#怎么创建Identity认证_C# ASP.NET Identity用户管理教程【实战】
    C#怎么创建Identity认证_C# ASP.NET Identity用户管理教程【实战】

    先说结论:用 dotnet new mvc -au Individual 创建项目最省事,它自动生成带 Identity 的完整认证流程——注册、登录、登出、密码重置全套搞定,不用手动配 DbContext、UserManager 或写 Account 控制器。对于绝大多数场景,这是开箱即用的最佳起

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。