51 lines
1.4 KiB
C#
Executable file
51 lines
1.4 KiB
C#
Executable file
using Microsoft.OpenApi.Models;
|
|
using Newtonsoft.Json.Serialization;
|
|
using Swashbuckle.AspNetCore.SwaggerGen;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
builder.Services.AddControllers()
|
|
.AddNewtonsoftJson(options =>
|
|
{
|
|
options.SerializerSettings.ContractResolver = new DefaultContractResolver
|
|
{
|
|
NamingStrategy = new SnakeCaseNamingStrategy()
|
|
};
|
|
});
|
|
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen(c =>
|
|
{
|
|
c.SchemaFilter<SnakeCaseSchemaFilter>();
|
|
});
|
|
|
|
var app = builder.Build();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
app.MapControllers();
|
|
app.Run();
|
|
|
|
public class SnakeCaseSchemaFilter : ISchemaFilter
|
|
{
|
|
private readonly SnakeCaseNamingStrategy _namingStrategy = new();
|
|
|
|
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
|
|
{
|
|
if (schema.Properties == null) return;
|
|
|
|
var newProps = new Dictionary<string, OpenApiSchema>();
|
|
foreach (var prop in schema.Properties)
|
|
{
|
|
var snakeName = _namingStrategy.GetPropertyName(prop.Key, false);
|
|
newProps[snakeName] = prop.Value;
|
|
}
|
|
|
|
schema.Properties = newProps;
|
|
}
|
|
}
|