Swashbuckle.AspNetCore下Swagger Try it out按钮无响应问题
我碰到过不少开发者在Swashbuckle.AspNetCore 2.4.0版本里遇到这个问题——Swagger UI能正常显示,但点"Try it out"切换为"Cancel"后,看不到执行请求的按钮,后来才发现Execute居然是个没样式的链接。这一般是UI资源加载或者版本兼容的问题,给你几个靠谱的解决方向:
先检查Swagger UI的静态资源是否加载正常
打开浏览器的开发者工具(F12),切换到"网络"标签,刷新Swagger页面,看看有没有404的CSS/JS资源。同时确保Startup.cs里的UseSwaggerUI配置没写错:app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API版本V1"); c.RoutePrefix = "swagger"; // 如果想让UI在根路径就留空 });还要注意中间件的顺序,
UseSwagger和UseSwaggerUI必须放在UseMvc之前,不然静态资源可能被拦截。强制刷新浏览器缓存
浏览器缓存的旧UI资源很可能是罪魁祸首,按下Ctrl+Shift+R强制刷新页面,或者直接清除浏览器的缓存后再重新访问,很多时候这就能解决样式显示异常的问题。调整Swashbuckle.AspNetCore的版本
2.4.0这个版本确实存在一些UI渲染的已知bug,你可以试试降级到2.3.0,或者升级到2.5.0这类后续的稳定版本,重新安装包、清理项目后再运行,大概率能解决按钮显示异常的问题。移除自定义的Swagger UI配置
如果你给Swagger UI加了自定义的样式或者脚本,可能会和默认的UI结构冲突,先把这些自定义代码注释掉,恢复默认设置,看看问题是不是就消失了。验证API路由和Swagger文档的一致性
有时候API的路由模板和Swagger生成的路径不匹配,也会导致请求执行无响应。你可以直接访问/swagger/v1/swagger.json,看看里面的paths是否和你实际的API路由一致,要是有差异,就得调整控制器的路由属性了。
你提到发现Execute是链接,这其实就是CSS没加载到位导致按钮变成了普通文本链接,优先检查静态资源和缓存的问题,应该就能搞定。
内容的提问来源于stack exchange,提问作者Kirsten

