Я не думаю, что вам нужно несколько контроллеров и наследование, чтобы достичь того, что вы пытаетесь сделать.Вы можете просто иметь контроллер с различными методами действия.Затем вы определяете атрибут [ApiVersion]
для каждого действия.
[Route("api/values")]
public class ValuesController : ControllerBase
{
[ApiVersion("1.0")
public IActionResult GetV1()
{
}
[ApiVersion("2.0")]
public IActionResult GetV2()
{
}
// and so on ..
}
Если ваш контроллер поддерживает несколько версий, вы можете сопоставить действие определенной версии.
[ApiVersion("1.0")
[ApiVersion("2.0")]
[Route("api/values")]
public class ValuesController : ControllerBase
{
[MapToApiVersion("1.0")]
public IActionResult GetV1()
{
}
[MapToApiVersion("2.0")]
public IActionResult GetV2()
{
}
// and so on ..
}
Если вам необходимоиметь несколько контроллеров, вы можете определить [ApiVersion]
для каждого контроллера.Или вы можете установить условные обозначения в файле запуска
services.AddApiVersioning(o =>
{
o.ReportApiVersions = true;
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
o.Conventions.Controller<ValuesController>().HasApiVersion(new ApiVersion(1, 0));
o.Conventions.Controller<ValuesV1Controller>().HasApiVersion(new ApiVersion(2, 0));
});
Вы также можете добавить условные обозначения для конкретного действия, используя метод o.Conventions.Controller<ValuesController>().Actions
.
Надеюсь, это поможет.