我需要将我的.NET Core 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
。我想念什么?来自查询和路由的参数工作正常。
您使用的是哪个版本的Swashbuckle?如果您使用的是版本5,则它将使用System.Text.Json
进行序列化。由于您使用的是Newtonsoft,因此它将忽略您为Newtonsoft序列化配置的任何内容。
如果您愿意,可以让Swashbuckle使用Newtonsoft代替System.Text.Json
:
Swashbuckle.AspNetCore.Newtonsoft
的引用services.AddSwaggerGenNewtonsoftSupport()
之后向Startup.cs
中的AddSwaggerGen()
添加呼叫Swashbuckle Readme包括有关此内容的更多信息。