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

Go语言开发Azure Functions集成swagger规范本地运行返回404问题

排查及解决步骤
  • 第一步:验证swagger文件生成与路径配置
    首先确认你已经执行了swag init命令在项目根目录生成了docs文件夹及内部的swagger.json、swagger.yaml等文件。
    你当前Swagger函数使用相对路径"docs/swagger.json"读取文件,需要确认运行二进制时的工作目录和docs文件夹处于同一层级。Azure Function本地运行时默认工作目录为项目根目录,若出现路径偏移可以改用go embed将静态文件嵌入二进制,避免路径依赖,示例代码如下:
    import "embed"
    import "net/http"
    
    //go:embed docs/swagger.json
    var swaggerJson []byte
    
    func Swagger(c *gin.Context) {
        c.Data(http.StatusOK, "application/json", swaggerJson)
    }
    
  • 第二步:修正swagger UI的拉取地址配置
    你当前硬编码了swagger json的拉取地址为http://localhost:7071/api/docs,如果本地Azure Function运行端口不是7071,swagger UI会拉取不到配置文件返回404。建议改为相对路径,适配不同运行环境:
    // 替换原有url配置行
    url := ginSwagger.URL("/api/docs")
    
    可先单独访问http://<你的运行地址>/api/docs确认可以正常返回swagger json内容,再访问/api/swagger查看UI。
  • 第三步:检查Azure Function自定义处理程序配置
    确认项目根目录的host.json中自定义处理程序配置开启了请求转发,且路由前缀和gin路由匹配,示例配置如下:
    {
      "version": "2.0",
      "extensions": {
        "http": {
          "routePrefix": "api"
        }
      },
      "customHandler": {
        "description": {
          "defaultExecutablePath": "<你的二进制文件名>",
          "workingDirectory": ".",
          "arguments": []
        },
        "enableForwardingHttpRequest": true
      }
    }
    
  • 第四步:排查路由拦截逻辑
    确认你没有在gin中添加全局鉴权、路由重写等中间件拦截/api/docs、/api/swagger的请求,可临时注释其他中间件只保留swagger相关路由验证是否可以正常访问。

内容的提问来源于stack exchange,提问作者Thijs van Tol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:02