相关疑难解决方法(0)

swagger错误:schemaIds冲突:为类型A和B检测到重复的schemaIds

使用Web API并使用swashbuckle生成swagger文档,我在两个不同的命名空间中定义了两个具有相同名称的不同类.当我在浏览器中打开swagger页面时说

冲突的schemaIds:为类型A和B检测到重复的schemaId.请参阅配置设置 - "UseFullTypeNameInSchemaIds"以获取潜在的解决方法

完整消息:

500:{"消息":"发生了错误.","ExceptionMessage":"冲突的schemaIds:为类型A和B检测到重复的schemaIds.请参阅配置设置 - \"UseFullTypeNameInSchemaIds \"以获取潜在的解决方法","ExceptionType ":"System.InvalidOperationException","StackTrace":"在Swashbuckle.Swagger.SchemaRegistry.CreateRefSchema(类型类型)\ r \n,在Swashbuckle.Swagger.Swagger.SchemaRegistry.CreateInlineSchema(类型类型)\ r \n在Swashbuckle.Swagger. SchemaRegistry.b__1f(JsonProperty prop)\ r \n在System.Linq.Enumerable.ToDictionary [TSource,TKey,TElement](IEnumerable 1 source, Func2 keySelector,Func 2 elementSelector, IEqualityComparer1 comparer )\ r \n在Swashbuckle.Swagger.SchemaRegistry.CreateObjectSchema(JsonObjectContract jsonContract) )\ r \n at Swashbuckle.Swagger.SchemaRegistry.CreateDefinitionSchema(Type type)\ r \n at Swashbuckle.Swagger.SchemaRegistry.GetOrRegister(Type type)\ r \n at Swashbuckle.Swagger.SwaggerGenerator.CreateOperation(ApiDescription apiDesc,SchemaRegistry) schemaRegistry)\ r \n在Swashbuckle.Swagger.SwaggerGenerator.CreateP athItem(IEnumerable的1 apiDescriptions, SchemaRegistry schemaRegistry)\r\n at Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.<GetSwagger>b__4(IGrouping2组)\ r \n在System.Linq.Enumerable.ToDictionary [TSource,TKEY的,TElement](IEnumerable的1 source, Func2的KeySelector,Func键2 elementSelector, IEqualityComparer1比较器)\ r \n在Swashbuckle.Swagger.SwaggerGenerator.GetSwagger(字符串使用rootUrl,字符串apiVersion)\ r \n在Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage请求,CancellationToken cancellationToken)\ r \n在System.Net.Http.MttageInvoker.SendAsync(HttpRequestMessage请求,CancellationToken cancellationToken)\ …

c# asp.net-web-api swagger-ui asp.net-web-api2 swashbuckle

43
推荐指数
6
解决办法
2万
查看次数

Swagger 因循环模型引用而崩溃

我有一个 .Net Core 2.2 OData API,我要为其实现 Swagger 文档。

我一直在关注这个示例:https://github.com/Microsoft/aspnet-api-versioning/tree/master/samples/aspnetcore/SwaggerODataSample

我已经让它工作到一定程度了。现在我面临着我的模型以循环方式相互引用的问题,让我解释一下:

注意:我使用 EFCore 代码优先方法来处理我的数据库。

我有这些模型(作为示例):Project、ProjectLocation、ProjectRegion。为了简短起见,我们称它们为 A、B 和 C。

A 引用了 B 和 C,如下所示:

public virtual ICollection<X> X{ get; set; }
Run Code Online (Sandbox Code Playgroud)

B 和 C 都直接引用 A,如下所示:

public A A{ get; set; }
Run Code Online (Sandbox Code Playgroud)

这些都是非常标准的关系数据库模型内容,但 SwaggerUI 似乎无法处理这个问题。

我收到的错误如下:

无法加载 API 定义。错误:获取错误:内部服务器错误 /swagger/v1/swagger.json

处理请求时发生未处理的异常。TypeLoadException:无法从程序集“Tc2fc56a7babe40419a678a075439246c.DynamicModels,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“NCCRD.Services.DataV2.Database.Models.ProjectLocation”。

System.Signature.GetSignature(Void* pCorSig, int cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)

如果需要,还可以使用堆栈跟踪。

我已尽可能阅读这两篇文章和所有参考链接,但没有找到有效的解决方案:

https://github.com/swagger-api/swagger-codegen/issues/741

https://github.com/swagger-api/swagger-codegen/issues/728

曾经看起来不错的解决方案是: https: //systemout.net/2017/04/07/swagger-asp-net-core-fixing-circular-self-references/,但这也没有效果。(我也联系作者寻求帮助)

当我从 B 或 C 中删除对 A 的引用时,SwaggerUI 就会正常加载。

如果有人能对此有所启发,我将非常感激。预先感谢您提供的任何帮助。

odata swagger asp.net-core

5
推荐指数
1
解决办法
7724
查看次数