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

Azure Functions Python自定义路由配置不生效问题咨询

Azure Functions Python自定义路由配置不生效问题咨询

嗨,我来帮你分析下这个问题~你遇到的情况是因为混合了Azure Functions的V1和V2两种编程模型的配置方式,导致你用@app.route设置的自定义路由没生效,反而默认用了文件夹名作为路由。

具体来说,你现在的代码里用了V2模型的func.FunctionApp()和@app.route装饰器,但同时又保留了V1模型里的function.json绑定配置——而Functions运行时会优先读取function.json里的httpTrigger设置,直接忽略了装饰器里的路由规则,所以才会出现不符合预期的URL。

下面给你两种解决思路,选一种适合你的就行:

方法一:切换到纯V2编程模型(推荐)

V2模型用装饰器就能搞定所有路由和绑定配置,不用手动维护function.json的绑定部分,更简洁。步骤如下:

  1. 修改你的function.json,只保留scriptFile字段,删掉整个bindings数组,修改后内容如下:
{
  "scriptFile": "__init__.py"
}
  1. 调整你的代码,把路由、权限、请求方法都通过装饰器配置,同时确保入口函数被装饰器覆盖(可以把main函数的逻辑整合进去,或者继续调用main):
import logging
import azure.functions as func

# 初始化FunctionApp实例
app = func.FunctionApp()

# 用装饰器定义路由、权限和支持的请求方法
@app.route(route="/search/testing", auth_level=func.AuthLevel.FUNCTION, methods=["get", "post"])
def get_customers_by_filters(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    # 这里可以直接写逻辑,或者调用你的main函数
    return func.HttpResponse(f"Hello world", status_code=200)
  1. 重新运行func start,此时访问的URL就会是http://localhost:3000/api/search/testing啦(V2模型默认会在路由前加/api前缀,如果想去掉可以修改host.json里的routePrefix配置)

方法二:保留V1模型(通过function.json配置路由)

如果你不想切换模型,继续用function.json来管理绑定,那就在httpTrigger的配置里直接添加route字段:

  1. 修改你的function.json,在httpTrigger绑定里加上"route": "search/testing":
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ],
      "route": "search/testing"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}
  1. 删掉代码里的app = func.FunctionApp()和@app.route装饰器部分,因为V1模型不需要这些:
import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    return func.HttpResponse(f"Hello world", status_code=200)
  1. 重新启动func start,此时URL就会变成你想要的http://localhost:3000/api/search/testing了

备注:内容来源于stack exchange,提问作者OK 400

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:28:07