// namespace AyaNova
// {
// using Microsoft.OpenApi.Models;
// using Swashbuckle.AspNetCore.SwaggerGen;
// using System.Linq;
// using Microsoft.AspNetCore.Authorization;
// //https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases/tag/v5.0.0-rc3
// ///
// /// Represents the Swagger/Swashbuckle operation filter used to document the implicit API version parameter.
// ///
// /// This is only required due to bugs in the .
// /// Once they are fixed and published, this class can be removed.
// public class SwaggerDefaultValues : IOperationFilter
// {
// ///
// /// Applies the filter to the specified operation using the given context.
// ///
// /// The operation to apply the filter to.
// /// The current operation filter context.
// public void Apply(OpenApiOperation operation, OperationFilterContext context)
// {
// // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412
// // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413
// foreach (var parameter in operation.Parameters)
// {
// var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);
// var routeInfo = description.RouteInfo;
// if (parameter.Description == null)
// {
// parameter.Description = description.ModelMetadata?.Description;
// }
// if (routeInfo == null)
// {
// continue;
// }
// // if (parameter.Default == null)
// // {
// // parameter.Default = routeInfo.DefaultValue;
// // }
// if (parameter.Schema.Default == null) { parameter.Schema.Default = new OpenApiString(description.DefaultValue.ToString()); }
// parameter.Required |= !routeInfo.IsOptional;
// }
// }
// }
namespace AyaNova
{
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;
///
/// Represents the Swagger/Swashbuckle operation filter used to document the implicit API version parameter.
///
/// This is only required due to bugs in the .
/// Once they are fixed and published, this class can be removed.
public class SwaggerDefaultValues : IOperationFilter
{
///
/// Applies the filter to the specified operation using the given context.
///
/// The operation to apply the filter to.
/// The current operation filter context.
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var apiDescription = context.ApiDescription;
operation.Deprecated |= apiDescription.IsDeprecated();
if (operation.Parameters == null)
{
return;
}
// REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412
// REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413
foreach (var parameter in operation.Parameters)
{
var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);
if (parameter.Description == null)
{
parameter.Description = description.ModelMetadata?.Description;
}
if (parameter.Schema.Default == null && description.DefaultValue != null)
{
parameter.Schema.Default = new OpenApiString(description.DefaultValue.ToString());
}
parameter.Required |= description.IsRequired;
}
}
}
}
// public void ConfigureServices(IServiceCollection services)
// {
// #region Swagger
// services
// .AddApiVersioning(options =>
// {
// options.AssumeDefaultVersionWhenUnspecified = true;
// options.DefaultApiVersion = Microsoft.AspNetCore.Mvc.ApiVersion.Parse("8.0");
// options.ReportApiVersions = true;
// });
// services.AddVersionedApiExplorer(o => o.GroupNameFormat = "'v'VVV");
// services.AddTransient, ConfigureSwaggerOptions>();
// services.AddSwaggerGen(
// c =>
// {
// c.OperationFilter();
// });
// #endregion