升级Swashbuckle.AspNetCore至6.3.1后必填Header无UI层级报错
问题现象
Swashbuckle.AspNetCore 6.2.3版本下相关功能运行正常,升级至6.3.1版本后,Swagger UI不再对配置为必填的Header参数抛出UI层级的必填校验错误提示。
此前存在同类问题记录:Swagger UI(Core环境下基于SwashBuckle实现)不会对必填Header参数抛出UI层级的错误提示。
原有问题代码
添加必填Header参数的实现代码如下:
operation.Parameters.Add(new OpenApiParameter() { Name = headerName, In = ParameterLocation.Header, Description = attribute.Description, Required = true, Schema = new OpenApiSchema { Type = "String", Default = new OpenApiString(attribute.DefaultValue) } });
问题根因
这是6.3.x版本的逻辑变更导致的:只要给标记为必填的参数在Schema中配置了Default默认值,Swagger UI就会判定该参数存在预填充内容,无需用户手动输入,因此不会触发空值的必填校验提示。6.2.3版本没有加入这个判定逻辑,所以升级前校验提示可以正常弹出。
修复方案
- 移除必填Header参数Schema下的
Default属性配置,如果需要告知用户参数默认值,直接把默认值说明写到Description字段即可,调整后UI层级的必填校验会恢复正常。 - 修复后的参考代码:
operation.Parameters.Add(new OpenApiParameter() { Name = headerName, In = ParameterLocation.Header, Description = $"{attribute.Description},默认值:{attribute.DefaultValue}", Required = true, Schema = new OpenApiSchema { Type = "String" } });
内容的提问来源于stack exchange,提问作者Muhammad Azhar Shahzad
相关产品推荐
相关产品推荐

