C# 中的版本控制 ASP.NET 核心

Versioning in C# ASP.NET Core

我是 ASP.NET Core 3.1-latest

版本控制的新手

假设我的产品在 1.0 版中附带了如下所示的模型:

public class MySelf
{
   public string Name {get; set;}
  
   public string CarName {get; set;}
    //more properties follows
}

此模型已投入生产,现在我想获取汽车名称列表。

所以我想在现有模型 class 中引入一个新的 属性,而不破坏版本 1.0 或让客户选择在 v1[=14= 中有新的 属性 ]

public class MySelf
{
   public string Name {get; set;}
  
   public List<string> CarNames {get; set;} // new property
    //more properties follows up to for example 8-10
}

如何为新模型做这个然后版本?

控制器示例

[ApiVersion("1.0")] ///existing version
[ApiVersion("1.1")] //New Version
public class SelfController : ControllerBase 
{

  [HttPost]
  public IActionResult GetDetails(MySelf myselftDetails)
  {
    //implementation
  }

  [HttPost,MapToVersion("1.1")]
  public IActionResult GetDetails(MySelf myselftDetails)
  {
    //for Version2 how do we solve that
  }
}

我们使用的一项技术是为每个版本启动多个模型。

例如:

[ApiVersion("1.0")] ///existing version
[ApiVersion("2.0")] //New Version
public class SelfController : ControllerBase 
{

  [HttPost]
  public IActionResult GetDetails(MySelfV1 myselftDetails)
  {
  }

  [HttPost,MapToVersion("2.0")]
  public IActionResult GetDetails(MySelfV2 myselftDetails)
  {
  }
}

假设每个版本都是没有向后兼容性的重大更改。语义版本控制必须是从 v1 到 v2 的跳转。