This commit is contained in:
54
server/ConfigureSwaggerOptions.cs
Normal file
54
server/ConfigureSwaggerOptions.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
namespace Sockeye
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc.ApiExplorer;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
using System;
|
||||
|
||||
/// <summary>
|
||||
/// Configures the Swagger generation options.
|
||||
/// </summary>
|
||||
/// <remarks>This allows API versioning to define a Swagger document per API version after the
|
||||
/// <see cref="IApiVersionDescriptionProvider"/> service has been resolved from the service container.</remarks>
|
||||
public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
|
||||
{
|
||||
readonly IApiVersionDescriptionProvider provider;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ConfigureSwaggerOptions"/> class.
|
||||
/// </summary>
|
||||
/// <param name="provider">The <see cref="IApiVersionDescriptionProvider">provider</see> used to generate Swagger documents.</param>
|
||||
public ConfigureSwaggerOptions( IApiVersionDescriptionProvider provider ) => this.provider = provider;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Configure( SwaggerGenOptions options )
|
||||
{
|
||||
// add a swagger document for each discovered API version
|
||||
// note: you might choose to skip or document deprecated API versions differently
|
||||
foreach ( var description in provider.ApiVersionDescriptions )
|
||||
{
|
||||
options.SwaggerDoc( description.GroupName, CreateInfoForApiVersion( description ) );
|
||||
}
|
||||
}
|
||||
|
||||
static OpenApiInfo CreateInfoForApiVersion( ApiVersionDescription description )
|
||||
{
|
||||
var info = new OpenApiInfo()
|
||||
{
|
||||
Title = "Sockeye API",
|
||||
Version = description.ApiVersion.ToString(),
|
||||
Description = "Sockeye service management software API",
|
||||
|
||||
};
|
||||
|
||||
if ( description.IsDeprecated )
|
||||
{
|
||||
info.Description += " This API version has been deprecated.";
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user