ASP.NET 6多API项目:如何在Chrome单标签页打开所有Swagger?
解决ASP.NET 6多API项目启动多Swagger标签页问题
方案1:合并所有API的Swagger到单个UI(推荐)
如果希望仅打开一个Swagger页面就能访问所有API接口,可在其中一个作为主入口的API项目中配置Swagger,加载其他API的Swagger文档:
- 在主API项目的
Program.cs中,注册多个Swagger文档:
builder.Services.AddSwaggerGen(c => { // 注册主API文档 c.SwaggerDoc("MainAPI", new OpenApiInfo { Title = "Main API", Version = "v1" }); // 注册其他API的文档,按需添加 c.SwaggerDoc("OrderAPI", new OpenApiInfo { Title = "Order API", Version = "v1" }); c.SwaggerDoc("ProductAPI", new OpenApiInfo { Title = "Product API", Version = "v1" }); });
- 配置Swagger UI,添加所有API的文档地址:
app.UseSwaggerUI(c => { // 主API的Swagger文档入口 c.SwaggerEndpoint("/swagger/MainAPI/swagger.json", "Main API v1"); // 其他API的Swagger文档入口,替换为对应项目的实际地址和端口 c.SwaggerEndpoint("https://localhost:5002/swagger/OrderAPI/swagger.json", "Order API v1"); c.SwaggerEndpoint("https://localhost:5003/swagger/ProductAPI/swagger.json", "Product API v1"); // 设置Swagger UI为项目根路径(可选) c.RoutePrefix = string.Empty; });
- 修改其他API项目的
launchSettings.json,禁用自动打开Swagger页面:
找到对应启动配置的"launchBrowser"字段,设置为false:
"profiles": { "https": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": false, "launchUrl": "swagger", "applicationUrl": "https://localhost:5002;http://localhost:5003", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }
配置完成后,启动所有API项目时只会打开主API的Swagger页面,可在该页面内切换访问所有其他API的接口。
方案2:修改Visual Studio启动行为,复用同一浏览器标签页
若不想合并Swagger文档,仅希望所有API的Swagger页面在同一标签页打开,可调整Visual Studio的浏览器启动设置:
- 点击顶部菜单 工具 -> 选项
- 导航到 项目和解决方案 -> Web项目
- 在 浏览器启动行为 区域,选择 在已有浏览器窗口中打开,总是在同一个标签页
- 保存设置后重新启动项目,所有Swagger页面会在同一标签页加载(新地址会替换当前标签页内容)
注:你之前尝试的c.ConfigObject.AdditionalItems["deepLinking"] = "true";仅用于Swagger UI内部的页面跳转(如点击接口链接时在当前标签页导航),无法控制Visual Studio启动时打开新标签页的行为,因此无法解决你的问题。
内容的提问来源于stack exchange,提问作者McFly
相关产品推荐
相关产品推荐

