1. 程式人生 > 其它 >ASP.NET Core – Swagger API Versioning

ASP.NET Core – Swagger API Versioning

前言

當 Swagger 遇上 Versioning 是會直接報錯的哦.

幸好解決方法也不難. 做一些小配置就可以了

主要參考

Integrating ASP.NET Core Api Versions with Swagger UI

What every ASP.NET Core Web API project needs - Part 2 - API versioning and Swagger

安裝 Versioning.ApiExplorer

dotnet add package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

Program.cs

builder.Services.AddApiVersioning(options => {
    options.ReportApiVersions = true;
});
builder.Services.AddVersionedApiExplorer(setup =>
{
    setup.GroupNameFormat = "'v'VVV";
    setup.SubstituteApiVersionInUrl = true;
});

做一個 ConfigureSwaggerOptions

public class ConfigureSwaggerOptions
      : IConfigureNamedOptions
<SwaggerGenOptions> { private 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, CreateVersionInfo(description)); } } public void Configure(string name, SwaggerGenOptions options) { Configure(options); } private OpenApiInfo CreateVersionInfo( ApiVersionDescription description) { var info = new OpenApiInfo() { Title = "Heroes API", Version = description.ApiVersion.ToString() }; if (description.IsDeprecated) { info.Description += " This API version has been deprecated."; } return info; } }

配置進去

builder.Services.AddSwaggerGen();
builder.Services.ConfigureOptions<ConfigureSwaggerOptions>();

最後是 UI

app.UseSwaggerUI(options =>
{
    foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions)
    {
        options.SwaggerEndpoint(
            $"/swagger/{description.GroupName}/swagger.json",
            description.GroupName.ToUpperInvariant());
    }
});

這樣就可以了