jba*_*bey 5 .net asp.net-web-api swagger swagger-ui swashbuckle
我有一个ASP.NET WebAPI项目,我试图用Swagger UI替换旧的XmlDocumentationProvider页面.我正在使用swashbuckle swagger for webAPI 5.3.1 nuget package.
我能够导航到localhost/MyApp/swagger,我可以在fiddler中看到它调用localhost/MyApp/swagger/docs/v1来检索代表我的API的JSON字符串.调用成功,JSON大约240KB,JSON有效.此时,Chrome标签会在使用"Aw snap"页面崩溃之前冻结约30秒.控制台中没有错误.
尝试验证此在线验证器中的api JSON是否正常工作,并说如果我取消选中所有三个"Follow ___ $ refs"复选框,则说明规范/架构是有效的.如果勾选了这些框中的任何一个,则大约需要30秒,然后该工具崩溃.
不幸的是,我不能在某处粘贴我的整个webAPI规范,但我会说这是一个非常庞大且非常复杂的内部业务应用程序.我们的一些DTO具有循环引用(与DTO本身相同类型的属性),我怀疑它可能会导致问题,但是没有任何记录或调试我无法确定,并且有超过1000个DTO类我不想梳理它们全部检查.
有没有办法打开swashbuckle(在服务器上)或swagger UI(在客户端上)的任何类型的日志记录或调试?有没有人遇到这个问题浏览器崩溃,并知道是什么导致它?提前谢谢.
jba*_*bey 11
我能够注释掉每个API控制器,加载swagger页面,然后重新打开它们,直到页面再次崩溃.一旦我弄清楚哪个控制器是问题,我就用控制器中的所有端点重复该过程.
事实证明,我们的一个非常古老的方法是将一个ORM实体作为一个身体参数(非常糟糕),这导致招摇过程试图解析整个ORM对象图并耗尽内存.更改此方法以接受DTO而不是数据层实体解决了该问题.
我认为当您使用非标准序列化器或 Web api 配置非标准时,这是一个已知的错误。
这是一个循环引用问题。
请参阅 git hub 存储库中的问题: https ://github.com/domaindrivendev/Swashbuckle/issues/486
小智 5
如果其他人遇到这个问题并且似乎没有任何帮助,那么这是我在代码中发现的内容。
我们有一个人负责编写我们的 API,他一定已经根据 DB Schema 自动导入了一堆类,但它所做的是创建了大量的部分类,并引用了其他部分类,而其他部分类又引用了回来到原来的班级。
所以这最终成为一个循环引用问题,如上所述,但并不完全相同。我花了一段时间才弄清楚有什么不同,但是当我注释掉对其他部分类的引用时,一切都很好。
我的建议是结合上面的 2 个答案,使用您自己的 DTO 并确保没有循环引用。
另一个重要的问题是在我们的[Route()]
标签中,这个人已经[Route("{model}"]
在 POST/PUT 方法的参数中放置了,他正在使用标签[Route("{model}")]
来解析模型的 JSON 主体,因此将其放在 Route 标签中是不必要的,并且会导致问题。本来就应该是的[Route("")]
。