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

打印 上一主题 下一主题

主题 831|帖子 831|积分 2493

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

将版本号嵌入到 URL 路径中,比方 /api/v1/controller 和 /api/v2/controller。
实现步骤

安装 Microsoft.AspNetCore.Mvc.Versioning 包:
  1. dotnet add package Microsoft.AspNetCore.Mvc.Versioning
复制代码
在 Program.cs 中配置版本控制:
  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddControllers();
  3. builder.Services.AddApiVersioning(options =>
  4. {
  5.     options.DefaultApiVersion = new ApiVersion(1, 0);
  6.     options.AssumeDefaultVersionWhenUnspecified = true;
  7.     options.ReportApiVersions = true;
  8. });
  9. var app = builder.Build();
  10. app.MapControllers();
  11. app.Run();
复制代码
在控制器中指定版本:
  1. [ApiController]
  2. [ApiVersion("1.0")]
  3. [Route("api/v{version:apiVersion}/[controller]")]
  4. public class UsersController : ControllerBase
  5. {
  6.     [HttpGet]
  7.     public IActionResult Get()
  8.     {
  9.         return Ok("Version 1.0");
  10.     }
  11. }
  12. [ApiController]
  13. [ApiVersion("2.0")]
  14. [Route("api/v{version:apiVersion}/[controller]")]
  15. public class UsersV2Controller : ControllerBase
  16. {
  17.     [HttpGet]
  18.     public IActionResult Get()
  19.     {
  20.         return Ok("Version 2.0");
  21.     }
  22. }
复制代码
测试:

  • /api/v1/users 返回 Version 1.0
  • /api/v2/users 返回 Version 2.0
2. 使用查询字符串版本控制

将版本号作为查询参数传递,比方 /api/users?api-version=1.0。
实现步骤

在 Program.cs 中配置版本控制:
  1. builder.Services.AddApiVersioning(options =>
  2. {
  3.     options.DefaultApiVersion = new ApiVersion(1, 0);
  4.     options.AssumeDefaultVersionWhenUnspecified = true;
  5.     options.ReportApiVersions = true;
  6.     options.ApiVersionReader = new QueryStringApiVersionReader("api-version");
  7. });
复制代码
在控制器中指定版本(与 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 中配置版本控制:
  1. builder.Services.AddApiVersioning(options =>
  2. {
  3.     options.DefaultApiVersion = new ApiVersion(1, 0);
  4.     options.AssumeDefaultVersionWhenUnspecified = true;
  5.     options.ReportApiVersions = true;
  6.     options.ApiVersionReader = new HeaderApiVersionReader("api-version");
  7. });
复制代码
在控制器中指定版本(与 URL 路径版本控制相同)。
测试:

  • 哀求头中添加 api-version: 1.0,返回 Version 1.0
  • 哀求头中添加 api-version: 2.0,返回 Version 2.0
4. 使用媒体范例版本控制

将版本号嵌入到 Accept 哀求头中,比方 application/json;v=1.0。
实现步骤

在 Program.cs 中配置版本控制:
  1. builder.Services.AddApiVersioning(options =>
  2. {
  3.     options.DefaultApiVersion = new ApiVersion(1, 0);
  4.     options.AssumeDefaultVersionWhenUnspecified = true;
  5.     options.ReportApiVersions = true;
  6.     options.ApiVersionReader = new MediaTypeApiVersionReader("v");
  7. });
复制代码
在控制器中指定版本(与 URL 路径版本控制相同)。
测试:

  • 哀求头中添加 Accept: application/json;v=1.0,返回 Version 1.0
  • 哀求头中添加 Accept: application/json;v=2.0,返回 Version 2.0
5. 组合多种版本控制方式

你可以同时支持多种版本控制方式,比方 URL 路径和查询字符串。
实现步骤

在 Program.cs 中配置版本控制:
  1. builder.Services.AddApiVersioning(options =>
  2. {
  3.     options.DefaultApiVersion = new ApiVersion(1, 0);
  4.     options.AssumeDefaultVersionWhenUnspecified = true;
  5.     options.ReportApiVersions = true;
  6.     options.ApiVersionReader = ApiVersionReader.Combine(
  7.      new QueryStringApiVersionReader("api-version"),
  8.      new HeaderApiVersionReader("api-version")
  9.   );
  10. });
复制代码
在控制器中指定版本(与 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 中实现版本控制的方式包括:

  • URL 路径版本控制:将版本号嵌入 URL 路径。
  • 查询字符串版本控制:将版本号作为查询参数传递。
  • 哀求头版本控制:将版本号放在 HTTP 哀求头中。
  • 媒体范例版本控制:将版本号嵌入到 Accept 哀求头中。
  • 组合多种方式:同时支持多种版本控制方式。
通过版本控制,我们可以更好地管理 API 的演进,确保新旧版本的兼容性,同时为客户端提供清晰的版本选择。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表