Я новичок в управлении версиями в ASP.NET Core 3.1 (последняя версия)
Предположим, что мой продукт поставляется с моделью, показанной здесь, в версии 1.0:
public class MySelf
{
public string Name {get; set;}
public string CarName {get; set;}
//more properties follows
}
Поскольку эта модель находится в производстве, теперь я хочу получить список названий автомобилей.
Итак, я хочу ввести новое свойство в существующий класс модели, не нарушая версию 1.0 и не предоставляя клиентам возможность выбора нового свойства в v1.
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
}
}
Чтобы добавить: CarNames
не является «новым свойством» в вашем примере второго класса. Это тип другой. С# больше не увидит «старый» тип.
Спасибо, Сани, понятно stackoverflow.com/users/26742/сани-сингх-хуттунен
Один из методов, который мы используем, заключается в том, чтобы раскрутить несколько моделей для каждой версии.
Например:
[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)
{
}
}
Предполагая, что каждая версия является критическим изменением без обратной совместимости. Семантическое управление версиями должно быть переходом от версии 1 к версии 2.
Изменение типа свойства в классе является критическим изменением и не может быть версионировано. Вместо этого добавьте новое свойство или новый класс. C# не сохраняет старые версии классов. Это работа для систем контроля версий, таких как Git, TFS и т. д. C# использует только последнюю версию.