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

ASP.NET Core Web API:如何为Swagger请求URL添加api子文件夹?

解决ASP.NET Core 7 Swagger端点前缀适配api子文件夹的问题

你的核心问题是API部署在api子文件夹下,但Swagger生成的端点未自动带上该前缀,同时修改控制器Route会导致重复前缀。以下是无需修改控制器Route的解决方案:

1. 配置应用的路径基址(PathBase)

在Program.cs中,将应用的路径基址设置为/api,这会让应用自动处理所有以/api开头的请求,同时Swagger会自动识别这个前缀生成正确的端点URL。

注意:这行代码必须放在UseRouting之前。

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// 注册Swagger服务
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
});

// 其他服务注册...

var app = builder.Build();

// 配置路径基址,必须在UseRouting之前
app.UsePathBase("/api");

app.UseRouting();

// 其他中间件(认证、授权等)...

// 配置Swagger中间件
app.UseSwagger(c =>
{
    // 调整Swagger JSON文件的路由模板,适配PathBase
    c.RouteTemplate = "swagger/{documentName}/swagger.json";
});

app.UseSwaggerUI(c =>
{
    // 指定Swagger JSON的地址(相对PathBase的路径)
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1");
    // 设置Swagger UI的路由前缀,对应访问地址:https://[domain]/api/swagger/index.html
    c.RoutePrefix = "swagger";
});

app.MapControllers();

app.Run();

2. 恢复控制器的Route配置

将控制器上的[Route("api/[controller]")]改回[Route("[controller]")],避免重复前缀:

namespace ApiProject.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class CompaniesController : ControllerBase
    {
        // 控制器逻辑...
    }
}

效果说明

  • 实际API端点URL:https://[domain]/api/companies/getall(符合部署在api子文件夹的要求)
  • Swagger UI访问地址:https://[domain]/api/swagger/index.html(保持你的原有访问路径)
  • Swagger中生成的所有端点都会自动带上/api前缀,调用时不会再指向根目录,解决HTTP 500错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:45:14