如何通过app.Map()设置API接口URL根路径?配置后触发404错误求助
解决用Map()设置API根路径导致404的问题
问题根源
你的配置存在两个核心问题:
Map()会创建独立的分支请求管道,外部的UseHttpsRedirection、UseAuthorization等中间件不会自动作用于分支内的请求,导致请求处理流程缺失关键环节。- 分支内的路由配置与外部管道衔接不当,同时Swagger未适配该前缀路径,接口无法被正确识别匹配。
修正后的完整代码
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; var builder = WebApplication.CreateBuilder(args); // 注册服务 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // WebApplication.CreateBuilder已默认加载配置源,无需重复构建 var app = builder.Build(); app.UseDefaultFiles(); app.UseStaticFiles(); // 开发环境适配Swagger路径 if (app.Environment.IsDevelopment()) { app.UseSwagger(options => { options.RouteTemplate = "api/v1/swagger/{documentname}/swagger.json"; }); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/api/v1/swagger/v1/swagger.json", "API V1"); options.RoutePrefix = "api/v1/swagger"; }); } // 构建API分支的完整请求管道 app.Map("/api/v1", apiApp => { apiApp.UseHttpsRedirection(); apiApp.UseAuthorization(); apiApp.UseRouting(); apiApp.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }); app.MapFallbackToFile("/index.html"); app.Run();
补充说明
- 若控制器使用默认路由
[Route("[controller]")],现在可通过/api/v1/WeatherForecast正常访问接口。 - 若需更精细化路由控制,也可为控制器添加前缀路由
[Route("api/v1/[controller]")],但建议避免与Map()的路径重复,防止冗余。
内容的提问来源于stack exchange,提问作者Jimary
相关产品推荐
相关产品推荐

