gpt4 book ai didi

asp.net-core - Swagger 因循环模型引用而崩溃

转载 作者:行者123 更新时间:2023-12-04 13:02:08 25 4
gpt4 key购买 nike

我有一个 .Net Core 2.2 OData API,我正在为它实现 Swagger 文档。

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

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

注意:我使用 EFCore Code first 方法来处理我的数据库。

我有这些模型(例如):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 无法处理这个。

我得到的错误如下:

Failed to load API definition. Errors: Fetch error: Internal Server Error /swagger/v1/swagger.json

An unhandled exception occurred while processing the request. TypeLoadException: Could not load type 'NCCRD.Services.DataV2.Database.Models.ProjectLocation' from assembly 'Tc2fc56a7babe40419a678a075439246c.DynamicModels, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.



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 就会正常加载。

如果有人能对此有所了解,我将不胜感激。
在此先感谢您提供的任何帮助。

最佳答案

经过两天的深入研究和实验,我找不到任何开箱即用的解决方案。 Swashbuckle 曾经是我的首选,但因为我在 .NetCore 中使用 Odata,这不是一个选择。 Swashbuckle 分别为 OData 和 .NetCore 提供选项,但不幸的是,一起使用时不会。

然而,我确实找到了一个解决方案,通过一些努力,我能够将其转换为适合我需要的东西。以下帖子构成了我最终解决方案的起点(BTW 仍在进行中):https://stackoverflow.com/a/51774147/4261155

我的“CustomDocumentFilter”版本已在 GitHub 上发布:https://github.com/SAEONData/NCCRD/blob/swagger_odata_netcore/NCCRD_API/NCCRD.Services.DataV2/Database/Contexts/CustomDocumentFilter.cs

如前所述,这仍然是一项正在进行的工作,因此它会在接下来的几天内发生变化,但与原始版本一起,我希望这可以帮助处于相同情况的其他人。另请记住,该类(class)已根据我的特定需求进行了调整,并不打算作为其他任何人的“开箱即用”解决方案。

关于asp.net-core - Swagger 因循环模型引用而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53705270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com