swagger - Swagger 结构错误“不应具有其他属性”$ ref 数组中的元素
问题描述
由于. $ref
_type: array
在https://editor.swagger.io中替换$ref: '#/definitions/EnumExample1'
为type: array
. 我没有看到错误。但我不确定如何在 swagger-gen 代码中解决这个问题。
如果需要更多信息来理解这个问题,请在评论中发表!
大摇大摆的片段
parameters:
- in: query
name: parameterNameX
description: parameterNameX
type: string
- in: query
name: name
type: string
- in: query
name: include
description: Comma-separated list of properties to include in the response
type: array
items:
$ref: '#/definitions/EnumExample1'
错误
Structural error at paths./v1/workflows.get.parameters.2.items
should NOT have additional properties
additionalProperty: $ref
Jump to line 30
启动.cs
services
.AddMvc(options =>
{
options.EnableEndpointRouting = false;
options.Conventions.Add(new CsvQueryStringConvention());
})
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
//ensure enums passed to client are strings
options.SerializerSettings.Converters.Add(new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy()});
})
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("",
new OpenApiInfo()
{
Title = "Service",
Version = "v1"
});
app.UseSwagger(c =>
{
c.RouteTemplate = "app/swagger/{documentName}/swagger.json";
c.PreSerializeFilters.Add((openApiDocument, httpReq) =>
{
openApiDocument.Servers = new List<OpenApiServer>
{
new OpenApiServer { Url = $"https://{httpReq.Host.Value}" }
#if DEBUG
, new OpenApiServer { Url = $"http://{httpReq.Host.Value}" }
#endif
};
});
c.SerializeAsV2 = true;
});
模型
public EnumExample1[] Example { get; set; }
来自 Swagger 的示例将作为逗号分隔的字符串传递。由于 c.SerializeAsV2 = true; 我不确定为什么生成的 Swagger.json 具有 OpenApi3 标准的 $ref 元素。
解决方案
将 UseInlineDefinitionsForEnums 添加到 swagger-gen 删除了对定义的引用并添加了类型:字符串。
在 swagger 和 openapi 上发现了一些未解决的问题,
OpenAPI.NET:SerializeAsV2产生无效的招摇(当 SerializeAsV3 有效时) [打开]
Swashbuckle.AspNetCore:查询参数中没有枚举类型(使用 SerializeAsV2)(使用 UseInlineDefinitionsForEnums 解决方案关闭)
services.AddSwaggerGen(c =>
{
c.SwaggerDoc(....);
//Generate inline schema definitions (as opposed to referencing a shared definition) for enum parameters and properties
c.UseInlineDefinitionsForEnums();
推荐阅读
- css - 即使设置为填充可用空间,弹性框中的按钮也有很小的边距
- spring-kafka - 卡夫卡恰好一次消息测试与“消费-转换-生产”集成测试
- python - 做减法和加法的Python代码?
- spring - Spring Cloud Data Flow:使用过滤器作为处理器
- scala - dotty / scala3 将映射的元组类型取消映射到其组成类型
- java - 什么是 window.addFlags(Integer.MIN_VALUE)
- html - 尝试使用 css 解决长期存在的 Chrome 浏览器问题,即在打印时短暂显示页面方向选项然后将其隐藏
- javascript - Axios.delete 从数据库中删除数据时出错,“错误:请求中止”
- laravel - 跨数据库连接中断
- c - React 中的 C 套接字和 socket.io/Websockets 是否兼容?