c# - 无效操作异常 : Can't use schemaId .。相同的 schemaId 已用于类型

标签 c# swagger odata asp.net-core-3.1

我收到以下错误。

InvalidOperationException: Can't use schemaId "$Registration" for type "$PortalService.Models.Registration". The same schemaId is already used for type "$PortalService.Models.Registration"
我已经尝试了以下链接中的建议,但没有成功。
swagger error: Conflicting schemaIds: Duplicate schemaIds detected for types A and B
我在模型中只有一个注册类。我曾尝试重命名类(class)但没有成功。
我正在使用 OData .Net Core 3.1 项目。
配置 Swagger 如下
 services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
            services.AddSwaggerGen(c =>
            {
                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Description = @"JWT Authorization header using the Bearer scheme. \r\n\r\n 
                      Enter 'Bearer' [space] and then your token in the text input below.
                      \r\n\r\nExample: 'Bearer 12345abcdef'",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    Scheme = "Bearer"
                });

                c.AddSecurityRequirement(new OpenApiSecurityRequirement()
                  {
                    {
                      new OpenApiSecurityScheme
                      {
                        Reference = new OpenApiReference
                          {
                            Type = ReferenceType.SecurityScheme,
                            Id = "Bearer"
                          },
                          Scheme = "oauth2",
                          Name = "Bearer",
                          In = ParameterLocation.Header,

                        },
                        new List<string>()
                      }
                    });
            });
使用 Swagger 如下
  app.UseSwagger(c =>
            {
                //c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = basepath);

                 
                c.PreSerializeFilters.Add((swaggerDoc, httpReq) => {
                    Microsoft.OpenApi.Models.OpenApiPaths paths = new Microsoft.OpenApi.Models.OpenApiPaths();
                    foreach (var path in swaggerDoc.Paths)
                    {
                        paths.Add(path.Key.Replace(path.Key, basepath + path.Key), path.Value);
                    }
                    swaggerDoc.Paths = paths;
                });
            });
            app.UseSwaggerUI(
                options =>
                {
                    options.RoutePrefix = string.Empty;

                    // build a swagger endpoint for each discovered API version

                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        options.SwaggerEndpoint($"{basepath}/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
                    }

                });
这似乎与
Swagger crashes with circular model references
我发现如果我从注册中注释掉合作伙伴的反向引用,错误就会消失,但我需要这个引用。我不清楚如何解决这种情况。
[ForeignKey("Partner")]
[DataMember(Name = "PartnerOID")]
[Column(TypeName = "VARCHAR(100)")]
public string PartnerOID { get; set; }
//public virtual Partner Partner { get; set; }

最佳答案

试试这个约翰:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1607#issuecomment-607170559
帮助过我。
我能理解发生了什么;我有几个带有“状态”或“类型”的枚举。
使用options.CustomSchemaIds( type => type.ToString() );解决了这个问题。

关于c# - 无效操作异常 : Can't use schemaId .。相同的 schemaId 已用于类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61881770/

相关文章:

C# UserControl BeginInvoke 问题

javascript - 带有摘要式身份验证的 Swagger UI

导入包的 GOSwagger 实现

.net - 为什么 .NET OData Serializer 这么慢

javascript - 将 Breeze 与启用服务器端分页的 OData 服务结合使用

c# - 300条查找表存储数据的方法(c#)

c# - 如何告诉编译器必须初始化属性

c# - 将 UWP ComboBox ItemsSource 绑定(bind)到 Enum

swagger - 如何使用 Swagger 2.0 将一个 API 文档拆分为多个文件

entity-framework - 使用 OData v4、EF6 和 Web API v2.2 处理日期