我有一个.Net Core 2.2 OData API,我正在努力实现Swagger文档 .
我一直在关注这个例子:https://github.com/Microsoft/aspnet-api-versioning/tree/master/samples/aspnetcore/SwaggerODataSample
我已经做到了这一点 . 现在我面临一个问题,我的模型以循环方式相互引用,让我解释一下:
注意:我使用EFCore Code第一种方法处理我的数据库 .
我有这些模型(作为示例):Project,ProjectLocation,ProjectRegion . 让我们称他们为A,B&C以保持简短 .
A如此引用B&C:
public virtual ICollection<X> X{ get; set; }
并且B&C都直接引用A:
public A A{ get; set; }
这都是非常标准的关系数据库模型的东西,但似乎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加载正常 .
如果有人能对此有所了解,我会非常感激 . 在此先感谢您提供的任何帮助 .