首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组中的Swagger结构错误“不应具有附加属性”$ref元素

数组中的Swagger结构错误“不应具有附加属性”$ref元素
EN

Stack Overflow用户
提问于 2020-07-29 01:07:24
回答 1查看 715关注 0票数 0

由于type: array中存在$ref元素,我收到了结构错误“不应该有其他属性”错误。

https://editor.swagger.io中,将$ref: '#/definitions/EnumExample1'替换为type: array。我看不到错误。但是我不确定如何在swagger-gen代码中修复这个问题。

如果需要更多的信息来理解这个问题,请在评论中发表!

Swagger代码段

代码语言:javascript
运行
复制
  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'

错误

代码语言:javascript
运行
复制
Structural error at paths./v1/workflows.get.parameters.2.items
should NOT have additional properties
additionalProperty: $ref
Jump to line 30

Startup.cs

代码语言:javascript
运行
复制
 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;
            });

模型

代码语言:javascript
运行
复制
public EnumExample1[] Example { get; set; }

来自Swagger的示例将作为逗号分隔的字符串传递。由于c.SerializeAsV2 = true;我不确定为什么生成的Swagger.json具有OpenApi3标准的$ref元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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解决方案关闭)

代码语言:javascript
运行
复制
services.AddSwaggerGen(c =>
            {
                
                c.SwaggerDoc(....);
                
                //Generate inline schema definitions (as opposed to referencing a shared definition) for enum parameters and properties
                c.UseInlineDefinitionsForEnums();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63139311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档