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

.NET 8部署后Swagger UI获取swagger.json报404错误求助

问题分析与解决

问题原因

部署后应用存在基础路径/appname,但当前Swagger配置存在两个核心问题:

  • SwaggerEndpoint使用了绝对路径/swagger/v1/swagger.json,会直接指向https://baseUri/swagger/v1/swagger.json,而实际swagger.json的正确地址是https://baseUri/appname/swagger/v1/swagger.json
  • 未针对应用基础路径调整Swagger中间件的路由规则,导致swagger.json的访问路径不匹配

解决方案

修改Program.cs中的Swagger相关配置,适配应用的基础路径,以下是三种可行方案:

方案1:动态适配路径基址(推荐)

通过获取请求的PathBase,动态生成SwaggerEndpoint的地址,适配任意部署路径:

// 先注册HttpContextAccessor服务
builder.Services.AddHttpContextAccessor();

builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();

app.UseSwaggerUI(c =>
{
    // 获取应用的路径基址(部署后的/appname)
    var pathBase = app.Services.GetRequiredService<IHttpContextAccessor>().HttpContext?.Request.PathBase.Value ?? string.Empty;
    // 拼接正确的swagger.json地址
    c.SwaggerEndpoint($"{pathBase}/swagger/v1/swagger.json", "XXXX API V1");
    c.RoutePrefix = "api/swagger";
});

方案2:使用相对路径

由于Swagger UI的路由前缀是api/swagger,可以使用相对路径直接指向swagger.json:

builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();

app.UseSwaggerUI(c =>
{
    // 相对路径:从api/swagger向上一级,指向swagger/v1/swagger.json
    c.SwaggerEndpoint("../swagger/v1/swagger.json", "XXXX API V1");
    c.RoutePrefix = "api/swagger";
});

方案3:手动设置路径基址(适合固定部署路径)

如果部署的应用路径固定为/appname,可以直接设置全局路径基址:

builder.Services.AddSwaggerGen();

var app = builder.Build();

// 设置应用基础路径
app.UsePathBase("/appname");

app.UseSwagger();

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "XXXX API V1");
    c.RoutePrefix = "api/swagger";
});

验证

部署后检查以下地址是否正常访问:

  • Swagger UI地址:https://baseUri/appname/api/swagger
  • swagger.json地址:https://baseUri/appname/swagger/v1/swagger.json
    此时Swagger UI即可正确加载swagger.json文件。

内容的提问来源于stack exchange,提问作者choopau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:42:43