Dot-Net

Swagger UI 在 API 獲取和瀏覽器崩潰後凍結

  • June 23, 2021

我有一個 ASP.NET WebAPI 項目,我試圖用 Swagger UI 替換我們舊的 XmlDocumentationProvider 頁面。我正在為 webAPI 5.3.1 nuget 包使用 swashbuckle swagger。

我能夠導航到 localhost/MyApp/swagger,我可以在 fiddler 中看到它呼叫 localhost/MyApp/swagger/docs/v1 來檢索代表我的 API 的 JSON 字元串。呼叫成功,JSON大約240KB,JSON有效。此時,chrome 選項卡會凍結大約 30 秒,然後會因“Aw snap”頁面而崩潰。控制台中沒有錯誤。

嘗試在此線上驗證器中驗證 api JSON有效,並且僅當我取消選中所有三個“Follow ___ $refs”複選框時,規範/模式才有效。如果選中其中任何一個框,則大約需要 30 秒,然後該工具會崩潰。

不幸的是,我無法將整個 webAPI 規範粘貼到某個地方,但我會說它適用於非常龐大且非常複雜的內部業務應用程序。我們的一些 DTO 具有循環引用(與 DTO 本身類型相同的屬性),我懷疑這可能會導致問題,但沒有任何日誌記錄或調試我無法確定,並且有超過 1000 個 DTO 類我不想梳理它們以檢查。

有沒有辦法為 swashbuckle(在伺服器上)或 swagger UI(在客戶端)打開任何類型的日誌記錄或調試?有沒有人遇到過瀏覽器崩潰的問題並知道是什麼原因造成的?提前謝謝。

我能夠註釋掉我的每個 API 控制器,載入 swagger 頁面,然後重新打開它們,直到頁面再次崩潰。一旦我弄清楚哪個控制器是問題所在,我對控制器中的所有端點重複了這個過程。

事實證明,我們非常古老的方法之一是將 ORM 實體作為主體參數(非常糟糕),這導致 swagger 嘗試解析我們的整個 ORM 對像圖並耗盡記憶體。更改此方法以接受 DTO 而不是數據層實體解決了該問題。

引用自:https://stackoverflow.com/questions/35605427