.NET 7项目集成Swashbuckle Swagger遇加载无限转圈问题求助
.NET 7集成Swashbuckle Swagger无限转圈问题
我在.NET 7项目里集成Swashbuckle Swagger时,加载Swagger UI一直无限转圈,程序疑似陷入无限循环——推测是生成swagger.json时出了问题,长时间运行会耗尽内存崩溃。查看swagger.json的请求状态,发现它始终处于pending状态。
我试过把SwaggerEndpoint的JSON路径改成swagger/v1/swagger.json、/v1/swagger.json、v1/swagger.json甚至../swagger/v1/swagger.json,问题依旧。
我的代码
Startup.cs中的Configure方法
app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "RackEmApp API V1"); });
Startup.cs中的ConfigureServices方法
services.AddSwaggerGen(c => { var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "RackEmApp API", Description = "供开发者与指定联盟/组织的RackEmApp数据集交互的Web API,目前处于开发阶段,支持有限。", }); });
解决思路
排查XML注释文件问题
你配置了读取XML注释文件,若文件不存在、路径错误或格式损坏,会导致Swagger生成文档时卡住。先注释掉c.IncludeXmlComments(...)这一行,重启项目测试:- 如果Swagger能正常加载,就去检查项目属性是否勾选了“生成XML文档文件”,确保路径和代码一致;同时查看XML文件是否有未闭合的注释标签这类格式错误。
处理模型循环引用
如果API返回的模型存在循环引用(比如A类包含B类属性,B类又包含A类属性),Swagger生成文档时会无限递归,导致卡死:- 可以给循环引用的属性加
[JsonIgnore]标签,排除其在Swagger文档中的生成; - 若使用Newtonsoft.Json,可配置序列化忽略循环引用:
services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; });
- 可以给循环引用的属性加
检查中间件顺序
确保UseSwagger()和UseSwaggerUI()的位置正确,要放在UseRouting()和UseEndpoints()之间,示例顺序:app.UseRouting(); app.UseAuthorization(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "RackEmApp API V1"); }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); });升级Swashbuckle包版本
可能是版本兼容性问题,确保使用的Swashbuckle.AspNetCore包是支持.NET 7的最新稳定版(比如6.4.x及以上版本)。
内容的提问来源于stack exchange,提问作者Matthew Warr
相关产品推荐
相关产品推荐

