Создайте 2 различных интерфейса Swagger для того, что может работать с двумя разными версиями V1 и V2 в одном приложении - PullRequest
0 голосов
/ 25 марта 2020

Создайте 2 разных Swagger UI для того, который может работать с двумя разными версиями V1 и V2 в одном приложении. Я понятия не имею, как это сделать.

1 Ответ

0 голосов
/ 25 марта 2020

Лучший способ получить решение, которое вы ищете, - это создавать различные версии вашего 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;
        }
    }

**> Чтобы включить управление версиями, вам нужно сослаться на

  1. Microsoft.AspNetCore. Mvc .Versioning
  2. 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. * Счастливое кодирование.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...