首页 > 编程语言 >在 ASP.NET Core WebAPI如何实现版本控制?

在 ASP.NET Core WebAPI如何实现版本控制?

时间:2025-01-02 18:11:53浏览次数:1  
标签:WebAPI Core 版本控制 Version api version 1.0 options

在 ASP.NET Core WebAPI 中实现版本控制(Versioning)是一种常见的做法,用于管理 API 的演进和兼容性。通过版本控制,我们可以在不破坏现有客户端的情况下引入新功能或修改现有功能。以下是实现版本控制的几种常见方法:


1. 使用 URL 路径版本控制

将版本号嵌入到 URL 路径中,例如 /api/v1/controller/api/v2/controller

实现步骤

安装 Microsoft.AspNetCore.Mvc.Versioning 包:

dotnet add package Microsoft.AspNetCore.Mvc.Versioning

Program.cs 中配置版本控制:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
});

var app = builder.Build();
app.MapControllers();
app.Run();

在控制器中指定版本:

[ApiController]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("Version 1.0");
    }
}

[ApiController]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class UsersV2Controller : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("Version 2.0");
    }
}

测试:

  • /api/v1/users 返回 Version 1.0
  • /api/v2/users 返回 Version 2.0

2. 使用查询字符串版本控制

将版本号作为查询参数传递,例如 /api/users?api-version=1.0

实现步骤

Program.cs 中配置版本控制:

builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.ApiVersionReader = new QueryStringApiVersionReader("api-version");
});

在控制器中指定版本(与 URL 路径版本控制相同)。

测试:

  • /api/users?api-version=1.0 返回 Version 1.0
  • /api/users?api-version=2.0 返回 Version 2.0

3. 使用请求头版本控制

将版本号放在 HTTP 请求头中,例如 api-version: 1.0

实现步骤

Program.cs 中配置版本控制:

builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.ApiVersionReader = new HeaderApiVersionReader("api-version");
});

在控制器中指定版本(与 URL 路径版本控制相同)。

测试:

  • 请求头中添加 api-version: 1.0,返回 Version 1.0
  • 请求头中添加 api-version: 2.0,返回 Version 2.0

4. 使用媒体类型版本控制

将版本号嵌入到 Accept 请求头中,例如 application/json;v=1.0

实现步骤

Program.cs 中配置版本控制:

builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.ApiVersionReader = new MediaTypeApiVersionReader("v");
});

在控制器中指定版本(与 URL 路径版本控制相同)。

测试:

  • 请求头中添加 Accept: application/json;v=1.0,返回 Version 1.0
  • 请求头中添加 Accept: application/json;v=2.0,返回 Version 2.0

5. 组合多种版本控制方式

你可以同时支持多种版本控制方式,例如 URL 路径和查询字符串。

实现步骤

Program.cs 中配置版本控制:

builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.ApiVersionReader = ApiVersionReader.Combine(
     new QueryStringApiVersionReader("api-version"),
     new HeaderApiVersionReader("api-version")
  );
});

在控制器中指定版本(与 URL 路径版本控制相同)。

测试:

  • /api/v1/users 返回 Version 1.0
  • /api/users?api-version=2.0 返回 Version 2.0
  • 请求头中添加 api-version: 3.0,返回 Version 3.0

总结

在 ASP.NET Core WebAPI 中实现版本控制的方式包括:

  1. URL 路径版本控制:将版本号嵌入 URL 路径。
  2. 查询字符串版本控制:将版本号作为查询参数传递。
  3. 请求头版本控制:将版本号放在 HTTP 请求头中。
  4. 媒体类型版本控制:将版本号嵌入到 Accept 请求头中。
  5. 组合多种方式:同时支持多种版本控制方式。

通过版本控制,我们可以更好地管理 API 的演进,确保新旧版本的兼容性,同时为客户端提供清晰的版本选择。

扫码_搜索联合传播样式-白色版.png

标签:WebAPI,Core,版本控制,Version,api,version,1.0,options
From: https://www.cnblogs.com/liyongqiang-cc/p/18648408

相关文章

  • asp.net core 9.0发布centos7.9
    一:项目名称:Net9API发布设置:设置为Linux-64,独立部署:将发布后的文件拷贝到centos制定文件夹,然后运行:./Net9API报错:./Net9API:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.20'notfound(requiredby./Net9API)./Net9API:/lib64/libstdc++.so.6:version`GLIBCXX_......
  • LeetCode 1422. Maximum Score After Splitting a String
    ......
  • hutool的一个奇怪现象,main ERROR Log4j2 could not find a logging implementation. P
    hutool有一个强大的功能,一行代码实现增删改查。在src/main/resources目录增加一个db.settings配置文件:url=jdbc:mysql://localhost:3306/ujcms?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueuser=rootpass=root##......
  • WebApi使用 (.Net Framework版)
    1创建使用.Net做web后端,推荐使用.NetCore,微软在此基础上做了很多适配,包括内置Swagger,可以直接启动等等。而.NetFramework版,需要手动配置很多内容。如果需要调用的项目是基于.NetFramework,那么web项目也应基于.NetFramework开发。或者其他原因不得不使用.NetFramework开发w......
  • THU-rCore 操作系统实验日寄 -2
    THU-rCore操作系统实验踩坑日寄-2PART2第二章主要涉及单道的批处理和特权级的部分,尚不涉及多道程序设计。早先一直提到的RustSBI,实为一个Rust的riscvsupervisorbinaryinterface。若按中科院软件所维护的中文版RISC-VManual翻译,就应该作“RISC-V监管器(SuperVisor)二进......
  • .NET Core技术研究-HttpContext访问的正确方式
    将ASP.NET升级到ASP.NETCore之后,相信大家都会遇到HttpContext.Current无法使用的问题。这也是我们迁移ASP.NETCore必须解决的问题。先列一下使用HttpContext的具体场景:1.在Controller层访问HttpContext2.在中间件中使用HttpContext3.在数据访问层使用HttpContext4.在后......
  • ASP.NET Core技术研究-探秘依赖注入框架
    ASP.NETCore在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务、提供服务。依赖注入不仅服务于ASP.NETCore自身,同时也是应用程序的服务提供者。毫不夸张的说,ASP.NETCore通过依赖注入实现了各种服务对象的注册和创建,同时也实现了面向抽象的编程模式和编程体验,提升了应用......
  • .NET Core 注入依赖
    .NETCore是一个现代化的、跨平台的框架,提供了构建高性能和可扩展应用程序的工具。依赖注入(DependencyInjection,DI)和中间件(Middleware)是.NETCore框架中两个核心的概念,它们在应用程序的架构中扮演着关键的角色。本文将详细探讨这两个概念,并展示如何在.NETCore应用程序中有......
  • .net6 WebApi 使用特性实现自动依赖注入
    首先搞三个特性类///<summary>///作用域///</summary>[AttributeUsage(AttributeTargets.Class)]publicclassDiScopedAttribute:Attribute{}///<summary>///单例///</summary>[AttributeUsage(AttributeTargets.Class)]publicclassDiSing......
  • 坚果云 —— 自动同步与版本控制兼得
    职场打拼的家人们,有没有过文件管理一团糟的闹心时刻?就拿咱市场专员来说,我负责的项目文件频繁更新,起初靠微信给老板发新版,倒也还行。可改的次数多了,微信消息里堆满各种版本,自己都迷糊,老板还常翻到旧版,我辛苦工作却因忘重发没少挨批,那叫一个冤。好在同事推荐了坚果云,真可谓是救......