.NET 6迁移后Swagger返回404,求排查缺失配置
.NET 6迁移后Swagger返回404的修复方案
以下是你可能遗漏的关键配置,对应问题逐一修复:
1. 修正SwaggerEndpoint的路径
你设置了RoutePrefix = "info/api",此时SwaggerUI的访问路径是/info/api,但原代码中SwaggerEndpoint的相对路径会被解析为/info/api/swagger/v1/swagger.json,而swagger.json的实际路径是/swagger/v1/swagger.json,导致找不到文件返回404。
修改为绝对路径即可解决:
app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); options.RoutePrefix = "info/api"; });
2. 保证中间件顺序正确
在.NET 6中,中间件的执行顺序直接影响功能可用性,Swagger相关中间件必须放在UseRouting()之后、UseAuthorization()之前,且在UseEndpoints()之前配置。正确的Program.cs代码结构示例:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务(必须) builder.Services.AddControllers(); // 注册Swagger服务 builder.Services.AddSwaggerGen(options => { var documentationXMLFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var documentationXMLFullPath = Path.Combine(AppContext.BaseDirectory, documentationXMLFile); options.IncludeXmlComments(documentationXMLFullPath); }); var app = builder.Build(); // 开发环境配置(可选) if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); // Swagger中间件必须放在此处 app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); options.RoutePrefix = "info/api"; }); // 映射控制器端点(必须) app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.Run();
3. 确认已注册控制器服务
如果你的代码中没有添加builder.Services.AddControllers()(或AddMvc()),Swagger无法识别API端点,也会导致访问异常。务必在服务注册阶段添加这一行。
4. 检查XML注释文件生成(可选)
虽然不会直接导致404,但如果XML注释文件未生成,Swagger文档会缺失接口说明。需要在项目属性的「生成」选项卡中勾选「XML文档文件」,确保生成路径与代码中读取的路径一致。
内容的提问来源于stack exchange,提问作者brunofer42
相关产品推荐
相关产品推荐

