.NET Core 6 Web API中如何为Swagger添加复制到剪贴板按钮?
解决.NET Core 6 Swagger UI路由无复制到剪贴板按钮的问题
1. 确认Swashbuckle包版本一致性
确保你安装的Swashbuckle.AspNetCore.Swagger、Swashbuckle.AspNetCore.SwaggerGen、Swashbuckle.AspNetCore.SwaggerUI三个包版本完全一致,且为适配.NET Core 6的6.x系列版本(如6.4.0及以上)。版本不一致可能导致UI功能缺失。
2. 检查SwaggerUI配置
在Program.cs中,确保SwaggerUI的配置正确启用相关功能,默认配置下复制按钮应存在,若未显示可显式添加以下配置:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 V1"); // 启用Try It Out面板,该功能默认附带路由复制按钮 c.EnableTryItOutPanel(); // 设置UI默认展开路由列表,便于查看复制按钮 c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.List); });
3. 清除缓存并重启项目
浏览器缓存可能导致SwaggerUI资源未更新,按下Ctrl+F5强制刷新页面,或重启.NET Core 6项目后再次查看。
4. 自定义复制按钮(备选方案)
如果上述方法无效,可通过注入自定义JavaScript添加复制功能:
在UseSwaggerUI配置中引入自定义脚本:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 V1"); // 注入自定义JS文件 c.InjectJavascript("/swagger-custom.js"); });
在项目的wwwroot目录下创建swagger-custom.js文件,内容如下:
window.addEventListener('load', function() { // 定时检查并添加复制按钮 setInterval(function() { const pathItems = document.querySelectorAll('.opblock-path'); pathItems.forEach(item => { if (!item.querySelector('.copy-btn')) { const copyBtn = document.createElement('button'); copyBtn.className = 'copy-btn'; copyBtn.textContent = '复制'; copyBtn.style.marginLeft = '10px'; copyBtn.addEventListener('click', function() { const pathText = item.querySelector('.opblock-summary-path').textContent.trim(); navigator.clipboard.writeText(pathText).then(() => { alert('已复制到剪贴板'); }); }); item.appendChild(copyBtn); } }); }, 1000); });
内容的提问来源于stack exchange,提问作者Hovi906
相关产品推荐
相关产品推荐

