.net - API 获取和浏览器崩溃后 Swagger UI 卡住

标签 .net asp.net-web-api swagger swagger-ui swashbuckle

我有一个 ASP.NET WebAPI 项目,我试图用 Swagger UI 替换旧的 XmlDocumentationProvider 页面。我正在使用 swashbuckle swagger for webAPI 5.3.1 nuget 包。

我能够导航到 localhost/MyApp/swagger,我可以在 fiddler 中看到它调用了 localhost/MyApp/swagger/docs/v1 来检索代表我的 API 的 JSON 字符串。调用成功,JSON 约 240KB,JSON 有效。此时,chrome 选项卡在与“Aw snap”页面崩溃之前卡住了大约 30 秒。控制台中没有错误。

尝试在 this online validator 中验证 api JSON有效并表示规范/模式有效,当且仅当我取消选中所有三个“遵循 ___ $refs”复选框时。如果勾选了这些框中的任何一个,大约需要 30 秒,然后该工具就会崩溃。

不幸的是,我无法将整个 webAPI 规范粘贴到某处,但我会说它适用于非常大且非常复杂的内部业务应用程序。我们的一些 DTO 具有循环引用(与 DTO 本身类型相同的属性),我怀疑这可能会导致问题,但没有任何日志记录或调试我无法确定,并且有超过 1000 个 DTO 类我不想梳理它们以进行检查。

有没有办法为 swashbuckle(在服务器上)或 swagger UI(在客户端上)打开任何类型的日志记录或调试?有没有人在浏览器崩溃时遇到过这个问题并知道是什么原因造成的?提前致谢。

最佳答案

我能够注释掉我的每个 API Controller ,加载 swagger 页面,然后重新打开它们,直到页面再次崩溃。一旦我确定了问题所在的 Controller ,我就对 Controller 中的所有端点重复了这个过程。

事实证明,我们的一个非常古老的方法是将 ORM 实体作为主体参数(非常糟糕),这导致 swagger 尝试解析我们的整个 ORM 对象图并耗尽内存。更改此方法以接受 DTO 而不是数据层实体解决了问题。

关于.net - API 获取和浏览器崩溃后 Swagger UI 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605427/

相关文章:

c# - NEST 异步调用

java - Swagger Springfox配置问题

c# - 带有 ASP.NET MVC WebApi 的 Swashbuckle 5.4.0 - swagger 网页内未显示文档

.net - 在 GAC 中有 2 个版本的 MySql.Data 程序集有问题吗?

c# - 如何在 WPF 窗口关闭后调用方法?

.net - 请求的性能计数器不是自定义计数器,它必须初始化为只读

linux - 在 Bash 中将 JSON 字符串转换为数组

.net - 从组织上讲,在使用 Entity Framework Code First 时,我应该将常见查询放在哪里?

C#:如果一个线程失败,则终止其他线程

node.js - 如何在reactjs中渲染swagger.json内容