本地无法加载新ASP.NET Core Web API的Swagger页面问题排查
问题排查与修正方案
你的问题源于三个关键配置/代码错误,逐一修正后即可解决Swagger和API接口的404问题:
1. 控制器路由属性语法错误
你的PresentController中Route属性多了一个闭合方括号,导致控制器无法被ASP.NET Core框架正确识别注册:
修正后的控制器代码
[ApiController] [Route("api/[controller]")] // 移除了多余的末尾] public class PresentController(IPresentsService _presentsService) : ControllerBase { [HttpGet] [Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(IEnumerable<PresentDto>), StatusCodes.Status200OK)] public async Task<IEnumerable<PresentDto>> GetAllPresentsAsync() { return await _presentsService.GetAllPresentsAsync(); } }
2. Program.cs缺少核心中间件与服务配置
你的Program.cs遗漏了三个关键步骤,导致Swagger无法生成文档、API接口无法被路由:
修正后的Program.cs代码
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); // 新增:添加Swagger文档生成服务 builder.Services.AddSwaggerGen(); // Add services to the container. builder.Services.AddScoped<IPresentsRepository, PresentsRepository>(); builder.Services.AddScoped<IPresentsService, PresentsService>(); builder.Services.AddDbContext<PresentsDbContext>(options => { options.UseNpgsql(builder.Configuration.GetConnectionString("PresentsDb")); }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); // 新增:启用Swagger JSON文档端点 app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.RoutePrefix = ""; }); // 新增:将控制器路由映射到请求管道 app.MapControllers(); app.Run();
修正点说明
- 控制器Route属性修正:修复语法错误后,框架才能正确识别控制器并绑定路由规则
api/present。 - AddSwaggerGen():添加Swagger文档生成的核心服务,配合
AddEndpointsApiExplorer生成API元数据。 - app.UseSwagger():启用Swagger JSON文档的访问端点,让Swagger UI能获取到API定义文件。
- app.MapControllers():将控制器的路由规则注册到请求处理管道,确保
/api/present这类请求能被正确处理。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

