Лучший способ получить решение, которое вы ищете, - это создавать различные версии вашего API. То есть каждая версия создается как отдельная папка в папке контроллера.
, например:
controllers/v1/{controllerName} for v1 endpoints
controllers/v2/{controllerName} for v2 endpoints
Затем в каждом контроллере вы указываете версию и маршрут
for v1 endpoints
namespace SampleWebApiAspNetCore.v1.Controllers
{
[ApiController]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class FoodsController : ControllerBase
{
[HttpGet]
public ActionResult Get()
{
return Ok("1.0");
}
}
}
for v2 endpoints
namespace SampleWebApiAspNetCore.v2.Controllers
{
[ApiController]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class FoodsController : ControllerBase
{
[HttpGet]
public ActionResult Get()
{
return Ok("2.0");
}
}
}
Затем, чтобы получить доступ к этим версиям на swagger, вы должны сконфигурировать swagger, внедрив IConfigureOptions
public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
{
readonly IApiVersionDescriptionProvider provider;
public ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider) => this.provider = provider;
public void Configure(SwaggerGenOptions options)
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description));
}
}
static OpenApiInfo CreateInfoForApiVersion(ApiVersionDescription description)
{
var info = new OpenApiInfo()
{
Title = "Sample API",
Version = description.ApiVersion.ToString(),
Description = "A sample application with Swagger, Swashbuckle, and API versioning.",
};
if (description.IsDeprecated)
{
info.Description += " This API version has been deprecated.";
}
return info;
}
}
**> Чтобы включить управление версиями, вам нужно сослаться на
- Microsoft.AspNetCore. Mvc .Versioning
Microsoft.AspNetCore. Mvc .Versioning.ApiExplorer
из диспетчера пакетов nuget **
затем при запуске настройте управление версиями и добавьте конфигурацию сваггера в качестве зависимости
services.AddApiVersioning(
config =>
{
config.ReportApiVersions = true;
config.AssumeDefaultVersionWhenUnspecified = true;
config.DefaultApiVersion = new ApiVersion(1, 0);
config.ApiVersionReader = new HeaderApiVersionReader("api-version");
});
services.AddVersionedApiExplorer(
options =>
{
options.GroupNameFormat = "'v'VVV";
// note: this option is only necessary when versioning by url segment. the SubstitutionFormat
// can also be used to control the format of the API version in route templates
options.SubstituteApiVersionInUrl = true;
});
services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
services.AddSwaggerGen();
Ваш метод настройки запуска будет выглядеть следующим образом
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider provider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(
options =>
{
options.RoutePrefix = string.Empty;
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint(
$"/swagger/{description.GroupName}/swagger.json",
description.GroupName.ToUpperInvariant());
}
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
каждая версия теперь будет иметь разные URL: https://localhost: 5001 / index. html? urls.primaryName = V1 https://localhost: 5001 / index. html? urls.primaryName = V2
или вы можете переключить другую версию с т Он выбирает выпадающее меню spe c
Все кредиты отправляются Фабиану Гозебринку
. Для получения дополнительной информации см. https://github.com/FabianGosebrink/ASPNETCore-WebAPI-Sample
* 1050. * Счастливое кодирование.