ASP.NET Core中Swagger持续加载但无法获取数据
Swagger持续加载无法获取数据的排查方案(.NET 6+ Program.cs配置)
运行项目时Swagger一直处于加载状态,无法获取接口数据,项目基于.NET 6+框架,所有配置均写在Program.cs中,代码如下:
using Microsoft.EntityFrameworkCore; using Package.Interfaces; using Package.Models; var builder = WebApplication.CreateBuilder(args); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<OperationsContext>(x => x.UseSqlServer(connectionString)); builder.Services.AddScoped<IContentRepository, ContentRepository>(); builder.Services.AddScoped<IPackageRepository, PackageRepository>(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); // Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json", "MyAPI V1"); }); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.Run();
排查与解决步骤:
修正Swagger端点路径
当前配置的c.SwaggerEndpoint("v1/swagger.json", "MyAPI V1")可能存在路径匹配问题,直接在浏览器访问https://localhost:{你的端口}/v1/swagger.json,如果返回404,说明路径错误。修改为根相对路径:c.SwaggerEndpoint("/v1/swagger.json", "MyAPI V1");调整中间件顺序
.NET 6+中间件执行顺序严格,确保Swagger相关中间件在UseHttpsRedirection之前加载,同时可以简化控制器映射写法:if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/v1/swagger.json", "MyAPI V1"); }); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 替代原UseEndpoints写法 app.MapControllers();检查控制器路由配置
确保所有Controller都标记了[ApiController]和路由属性(比如[Route("api/[controller]")]),没有正确路由的控制器无法被Swagger扫描到。验证Swagger JSON可访问性
启动项目后,手动访问/v1/swagger.json,如果能正常返回JSON数据,说明Swagger生成正常,问题出在UI端路径;如果返回错误,检查是否有中间件拦截(比如认证、授权中间件)或服务配置错误。
修改后的完整Program.cs示例:
using Microsoft.EntityFrameworkCore; using Package.Interfaces; using Package.Models; var builder = WebApplication.CreateBuilder(args); // 配置控制器与Swagger服务 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 数据库上下文配置 var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<OperationsContext>(x => x.UseSqlServer(connectionString)); // 注册仓储服务 builder.Services.AddScoped<IContentRepository, ContentRepository>(); builder.Services.AddScoped<IPackageRepository, PackageRepository>(); var app = builder.Build(); // 开发环境启用Swagger if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/v1/swagger.json", "MyAPI V1"); // 可选:设置默认展开所有接口文档 c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.List); }); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 映射控制器路由 app.MapControllers(); app.Run();
内容的提问来源于stack exchange,提问作者smbbb
相关产品推荐
相关产品推荐

