You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:25:27