Мне нужно настроить мой. NET базовый API-интерфейс на случай змеи, поэтому при запуске я добавил:
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() };
})
и сделал два фильтра для чванства:
public class SwaggerSnakeCaseParameterFilter : IParameterFilter
{
private readonly SnakeCaseNamingStrategy _namingStrategy = new SnakeCaseNamingStrategy();
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
parameter.Name = _namingStrategy.GetPropertyName(parameter.Name, false);
}
}
public class SwaggerSnakeCaseDocumentFilter : IDocumentFilter
{
private readonly SnakeCaseNamingStrategy _namingStrategy = new SnakeCaseNamingStrategy();
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
foreach (var path in swaggerDoc.Paths.ToArray())
{
var apiDescription = context.ApiDescriptions.First(ad => "/" + ad.RelativePath == path.Key);
var newKey = path.Key;
foreach (var parameterDescription in apiDescription.ParameterDescriptions.Where(pd =>
pd.Source == BindingSource.Path))
{
newKey = newKey.Replace(
"{" + parameterDescription.Name + "}",
"{" + _namingStrategy.GetPropertyName(parameterDescription.Name, false) + "}");
}
swaggerDoc.Paths.Remove(path.Key);
swaggerDoc.Paths.Add(newKey, path.Value);
}
}
}
Но тело запроса и тело ответа по-прежнему отображаются как CamelCase
на Swagger
. Что мне не хватает? Параметры из запроса и маршрута работают нормально.