SnakeCase请求正文忽略格式

问题描述 投票:1回答:1

我需要将我的.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。我想念什么?来自查询和路由的参数工作正常。

.net .net-core swagger swashbuckle
1个回答
0
投票

您使用的是哪个版本的Swashbuckle?如果您使用的是版本5,则它将使用System.Text.Json进行序列化。由于您使用的是Newtonsoft,因此它将忽略您为Newtonsoft序列化配置的任何内容。

如果您愿意,可以让Swashbuckle使用Newtonsoft代替System.Text.Json

  • 添加对Swashbuckle.AspNetCore.Newtonsoft的引用
  • 在呼叫services.AddSwaggerGenNewtonsoftSupport()之后向Startup.cs中的AddSwaggerGen()添加呼叫

Swashbuckle Readme包括有关此内容的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.