.net - SnakeCase 请求正文忽略格式
问题描述
我需要将我的 .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
on Swagger
。我错过了什么?来自查询和路由的参数工作正常。
解决方案
您使用的是哪个版本的 Swashbuckle?如果您使用的是版本 5,它将System.Text.Json
用于序列化。由于您使用的是 Newtonsoft,它将忽略您为 Newtonsoft 序列化配置的任何内容。
System.Text.Json
如果您愿意,您可以让 Swashbuckle 使用 Newtonsoft,而不是:
- 添加对的引用
Swashbuckle.AspNetCore.Newtonsoft
services.AddSwaggerGenNewtonsoftSupport()
呼叫后添加Startup.cs
呼叫AddSwaggerGen()
如果您有兴趣,Swashbuckle 自述文件包含有关此的更多信息。
推荐阅读
- php - PHP 数组引用替换
- c++ - 使用检测成语检测采用强枚举参数的模板类成员函数
- c# - 如果在 for 循环条件中使用属性,将属性存储在局部变量中是否有意义?
- c# - 将位图图像的单个通道保存到文件
- xamarin.ios - 使用 Xamarin.iOS 和 MvvmCross 绑定到 MvxView 的问题
- php - 如何在首次访问网站时检查 cookie 是否启用
- system-calls - 在 gem5 SE 模式下检测 ROI
- firebase - 部署时使 Google Cloud Function 的 Firebase 缓存失效
- python - 上下文管理器是否仅用于引发异常?
- c++ - 在 C++ 中一次从标准输入读取一个字节的快速简单的方法