ASP.NET Core Swagger访问swagger.json报404且无错误提示
Swagger 404 问题排查与解决
问题描述
Swagger页面提示“响应状态码404 https://localhost:7247/swagger/v1/swagger.json”,手动访问该地址也返回404,ASP.NET Core应用运行时无任何错误提示。当前使用.NET 7.0版本,大部分NuGet包版本为7.0.12;已通过编译设置禁用部分控制器排除路由配置问题,怀疑是服务/应用注册顺序错误或Swagger配置静默失败。
核心问题定位
查看你的EnsureSwagger方法,发现SwaggerDoc的ID设置为"Notes",但Swagger UI默认会请求/swagger/v1/swagger.json(对应ID为v1的文档),两者ID不匹配导致无法找到对应的swagger.json文件。
解决方案
方案1:统一Swagger文档ID为v1
修改EnsureSwagger中的SwaggerDoc配置,将ID改为"v1",与默认请求路径匹配:
options.SwaggerDoc("v1", new() { Description = "Open API Docs for Notes v1", Title = "Notes", Version = "v1", Contact = new() { Email = "steffen@technically.fun", Name = "Steffen Blake", Url = new Uri("https://technically.fun"), } });
方案2:在SwaggerUI中指定文档路径
如果希望保留Notes作为文档ID,需要在UseSwaggerUI中显式指定对应的swagger.json路径:
app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/Notes/swagger.json", "Notes v1"); });
额外验证点
- 确认
AddControllers()在AddEndpointsApiExplorer()之前注册(你的代码中顺序正确,无需调整) - 确保中间件顺序合规:
UseSwagger()/UseSwaggerUI()需在UseAuthentication()/UseAuthorization()之前(你的代码顺序正确)
内容的提问来源于stack exchange,提问作者Steffen Cole Blake
相关产品推荐
相关产品推荐

