由于type: array
中存在$ref
元素,我收到了结构错误“不应该有其他属性”错误。
在https://editor.swagger.io中,将$ref: '#/definitions/EnumExample1'
替换为type: array
。我看不到错误。但是我不确定如何在swagger-gen代码中修复这个问题。
如果需要更多的信息来理解这个问题,请在评论中发表!
Swagger代码段
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
Startup.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元素。
发布于 2020-08-01 02:01:28
将UseInlineDefinitionsForEnums添加到swagger-gen删除了对定义的引用,并添加了类型: string。
在swagger和openapi上发现了一些未解决的问题,
OpenAPI.NET:SerializeAsV2 produces invalid swagger (when SerializeAsV3 is valid)打开
Swashbuckle.AspNetCore:No type for enums in query parameters (using 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();
https://stackoverflow.com/questions/63139311
复制相似问题