Swagger UI 显示 camelCase 参数而不是 PascalCase

Posted

技术标签:

【中文标题】Swagger UI 显示 camelCase 参数而不是 PascalCase【英文标题】:Swagger UI shows camelCase parameters instead of PascalCase 【发布时间】:2020-04-24 09:57:24 【问题描述】:

我在 Asp.Net Core 3.1 API 中使用 NewtonSoft.json 和 Swashbuckle.AspNetCore 版本 5.3.3。

在 Asp.Net Web API 中,默认情况下,2 个输入输出参数大小写为 PascalCase。

现在我正在迁移到默认情况为 camelCase 的 .Net Core API。

所以我通过在 Startup.cs 中添加以下代码将其更改为使用 PascalCase:

services.AddControllers()
            .ConfigureApiBehaviorOptions(options =>
            
                options.SuppressModelStateInvalidFilter = true;
            )
            .AddNewtonsoftJson(options =>
            
                // Use the default property (Pascal) casing
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            );//Configure Newtonsoft as JSON serializer.

但在 Swagger UI 中,它以 camelCase 格式显示输入和输出参数,而 API 的响应包含 PascalCase 格式的值。

我在 Google 上搜索过,但在 AddSwaggerGen DescribeAllParametersInCamelCase() 中找到了一个方法,该方法将所有参数转换为 camelCase。

有DescribeAllParametersInPascalCase()方法吗?

如何配置 Swagger/Swashbuckle 以在 PascalCase 中显示输入/输出参数?

这是一个例子:

【问题讨论】:

【参考方案1】:

您可以像这样配置 JsonSerializerOptions:

.AddJsonOptions(opt => opt.JsonSerializerOptions.PropertyNamingPolicy = null)

【讨论】:

工作就像一个魅力。 我想要驼色外壳,不想依赖任何“默认值”,所以我将其设置为null,而是将其设置为System.Text.Json.JsonNamingPolicy.CamelCase 我把这个放在哪里?我在哪个对象上调用 .AddJsonOptions? 到 AddController().AddJsonOptions() 适用于属性名称,但不适用于字典键 ?。您也可以设置JsonSerializerOptions.DictionaryKeyPolicy = null;,但它仅适用于实际响应,不适用于 SwaggerGen 生成的示例。【参考方案2】:

如果您仍在 Asp.Net Core 3.1 中使用 Newtonsoft.Json 而不是新的默认 System.Text.Json

为 Asp.Net Core 3.1 配置 Newtonsoft 后:

services.AddControllers().AddNewtonsoftJson(x => 
  // My config is Pascal Case
  x.SerializerSettings.ContractResolver = new DefaultContractResolver();
);

您还需要安装Swashbuckle.AspNetCore.Newtonsoft 并通过在services.AddSwaggerGen(... 之后添加以下内容来选择加入:

services.AddSwaggerGenNewtonsoftSupport();

【讨论】:

以上是关于Swagger UI 显示 camelCase 参数而不是 PascalCase的主要内容,如果未能解决你的问题,请参考以下文章

(二十二)ATP应用测试平台——swagger2集成swagger-bootstrap-ui实现API文档访问

swagger-ui不显示问题定位

Swagger UI 不在模型中显示枚举值

Swashbuckle.AspNet.Core:Swagger UI 显示空白页面 - 如何修复?

Rack-cors 未在 swagger-ui_rails 的生产环境中显示标题

如何在 Swagger-ui 中显示 Spring Security 用户名密码身份验证过滤器 url?