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

.NET 8独立进程Azure Function调整Swagger路径移除/api前缀

解决方案

一、调整Swagger中间件的路由前缀

在Program.cs里配置Swagger时,直接指定路由前缀为docs,让Swagger相关路径脱离/api前缀:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "领域API", Version = "v1" });
});

builder.Services.AddEndpointsApiExplorer();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger(c =>
    {
        // 将Swagger的路由前缀设为"docs",替代默认的"api"
        c.RoutePrefix = "docs";
    });
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/docs/swagger.json", "领域API V1");
    });
}

二、给Function路由添加参数约束

为了彻底避免/api/swagger.json被当成{Id}参数解析,在Function的路由上给id添加类型约束(比如int或Guid),只有符合类型格式的路径才会触发该Function:

示例(int类型Id):

[FunctionName("GetDomainItem")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "api/{id:int}")] HttpRequest req,
    int id,
    ILogger log)
{
    // 业务逻辑实现
    return new OkObjectResult($"获取到ID为{id}的领域数据");
}

示例(Guid类型Id):

[FunctionName("GetDomainItem")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "api/{id:guid}")] HttpRequest req,
    Guid id,
    ILogger log)
{
    // 业务逻辑实现
    return new OkObjectResult($"获取到ID为{id}的领域数据");
}

三、验证效果

配置完成后启动服务:

  • GET /Api/123(或对应Guid格式的ID):正常触发Function并返回数据
  • GET /Docs/Swagger.json:可以正常获取Swagger文档
  • GET /api/swagger.json:会返回404,因为路由约束不匹配,不会进入Function处理,也就不会出现参数转换错误

补充说明

你之前配置OpenApiServer的方式只修改了Swagger文档中声明的服务器地址,并没有改变Swagger本身的路由路径,所以解决不了前缀冲突问题。而通过上述两步配置,既能保留原有API的路由设计,又能让Swagger文档路径独立出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:42:43