我正在尝试在我的
ASP.NET WEB API 2
项目中安装 Swagger API。
我已经安装了
swashbuckle
(v5.4.0)nuget包。然后我调试项目并到达 URL/swagger/ui/index
,我得到 Fetching resource list: http://localhost:44432/swagger/docsv1; Please wait.
一段时间后,我发现 chrome 页面没有响应。杀死或等待屏幕。
我使用的是默认值
SwaggerConfig.cs
。
我已经在以下位置运行了 json 验证测试:
https://online.swagger.io/validator/debug?url={SwaggerJSON URL HERE}/docs/v1
我可以采取哪些步骤来进一步调试我的问题?
[编辑] 我不小心打开了一个选项卡,足足 30 分钟后页面才呈现出来。可能是什么原因造成的?解析json文件时可能会出现无休止的递归?
https://github.com/domaindrivendev/Swashbuckle/issues/891 我不确定这是否对您有帮助,但您可以查看这个问题。
看看它是否会影响您本地计算机上的相同问题,这将是很有趣的,而只有当我将其托管在互联网上时才发生在我身上。
我刚刚分叉了该项目并更改了缓冲区大小并在等待有关该问题的响应时使用了自定义 DLL。
我也遇到了同样的问题。我就是这样解决的。
我不小心打开了一个标签,30 分钟后 页面呈现。可能是什么原因造成的?或许无穷无尽 解析json文件时递归?
检查 json 响应的扩展名/大小。里面可能有很多对象和数组。
我能够通过使用 DTO 对象 制作 EF 对象的副本来解决此问题(我为此使用了 AutoMapper 或类似方法)。这样,您将精挑细选您需要的内容,而不仅仅是获得不需要的额外引用(引用 EF 类中其他类的虚拟类可能会这样做),并且实际上会非常耗时处理/获取。
这样,您就可以在 Web API Swagger 中公开一个 DTO 对象,它是 EF/DB 实体的简化版本。
这是一个快速...
// GET: api/MyWebApiApp/GetItemById/7
public TheItemDTO GetItemById(int id)
{
TheItem item = _repositoryLayer.GetItemById(id); // from EF, and from DB
if (item == null) return null;
else return new TheItemDTO(TheItem); // return the DTO, from your DB item
}
public class TheItemDTO
{
public TheItemDTO(TheItem item)
{
id = item.id;
value = item.value;
}
public int id { get; set; }
public string value { get; set; }
}
我有同样的错误,但是上面的答案都没有帮助我
就我而言,在每个操作中我都有以下代码片段
[ResponseType(typeof(<your-response-type>))]
从 Swagger 完全渲染的方法中删除此片段之后
我今天遇到这个问题,所以正在更新。
最终问题是仅定义类型:数组而不定义其项目:
products:
type: array
让它崩溃。
products:
type: array
items:
type: string
工作正常。
我的第一个解决方案是在应用程序配置中将 UI 版本更改为版本 3: app.config["SWAGGER"] = { "title": "招摇 xxxxxx", “ui版本”:3, }
它并没有解决最终问题,而是使 UI 加载。
我使用 YAML 格式的路由文档字符串来生成 JSON。