.NET 6 Web API如何默认加载根视图且保留Swagger UI访问
问题描述
基于 .NET 6 开发 Web API 项目时,开发环境已配置启用 Swagger UI,但当前启动项目后会默认加载 https://localhost:7004/swagger/index.html。需要调整配置满足以下需求:
- 访问根路径
https://localhost:7004时,默认加载项目默认视图,不再自动跳转至 Swagger UI 页面 - 保留 Swagger UI 访问能力,访问
https://localhost:7004/swagger/index.html时可正常打开
当前 Program.cs 中 HTTP 请求管道配置代码如下:
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseStaticFiles(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.MapControllerRoute( name: "default", pattern: "{controller=ControllerName}/{action=Index}/{id?}");
实现方法
默认自动跳转到 Swagger 是 .NET Web API 开发模板的默认行为,本质是 SwaggerUI 中间件默认会拦截根路径请求做跳转,同时部分项目启动配置也默认把 Swagger 设为启动页。按以下两步调整即可:
- 修改 Program.cs 中的中间件配置,显式指定 SwaggerUI 的路由前缀,关闭默认根路径跳转,同时调整中间件顺序保证默认路由优先匹配:
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => { // 显式指定SwaggerUI的路由前缀为swagger,不映射根路径 options.RoutePrefix = "swagger"; }); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapControllers(); // 保留默认路由配置,根路径会自动匹配对应控制器的Index视图 app.MapControllerRoute( name: "default", pattern: "{controller=ControllerName}/{action=Index}/{id?}");
- 检查项目下
Properties/launchSettings.json文件,找到当前使用的启动配置项,将其中的launchUrl字段值从原来的swagger改为空字符串,避免IDE启动调试时主动打开Swagger地址:
{ "profiles": { "你的项目名称": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "", // 原默认值为"swagger",修改为空即可 "applicationUrl": "https://localhost:7004;http://localhost:5004", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
调整完成后重启项目,访问根路径会直接加载预设的默认视图,手动访问 /swagger/index.html 仍可正常使用 Swagger 调试接口。
内容的提问来源于stack exchange,提问作者Bhav
相关产品推荐
相关产品推荐

