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

如何让FastAPI依赖项填充路径参数?解决双路由共用函数422错误

解决FastAPI双路由共用函数的参数注入问题

你碰到的422错误根源在于:/inbound路由的test函数需要wako_id参数,但该路由既没提供路径/查询参数,也没把依赖的结果注入到函数里——原来的dependencies参数仅执行依赖函数,不会将返回值传递给视图函数,因此FastAPI无法找到wako_id的取值来源,抛出参数缺失的错误。

下面提供两种可行的解决方案:

方案一:直接让参数绑定依赖生成值

将wako_id参数的默认值设置为依赖函数的返回结果,这样/inbound路由会使用依赖生成的值,/outbound/{wako_id}路由则会优先使用路径参数的值(路径参数会覆盖默认的依赖注入值):

from fastapi import Depends, Request, APIRouter

authorized_router = APIRouter()

# 调整依赖函数,直接返回wako_id的值
def get_wako_id():
    return "123"

def test(request: Request, wako_id: str = Depends(get_wako_id)):
    return wako_id

authorized_router.add_api_route(
    "/inbound",
    test,
    methods=["GET"]
)

authorized_router.add_api_route(
    "/outbound/{wako_id}",
    test,
    methods=["GET"]
)

方案二:兼容依赖返回字典的场景

如果你的依赖函数必须返回包含多个字段的字典,可以通过同时接收依赖结果和可选路径参数的方式处理:

from fastapi import Depends, Request, APIRouter
from typing import Optional

authorized_router = APIRouter()

def middleware():
    return {"wako_id": "123"}

def test(request: Request, wako_data: dict = Depends(middleware), wako_id: Optional[str] = None):
    # 优先使用路径参数的值,无参数时使用依赖生成的值
    return wako_id or wako_data["wako_id"]

authorized_router.add_api_route(
    "/inbound",
    test,
    methods=["GET"]
)

authorized_router.add_api_route(
    "/outbound/{wako_id}",
    test,
    methods=["GET"]
)

两种方案都能实现需求:/inbound路由会返回依赖生成的123,/outbound/456这类请求会返回路径中的456。

内容的提问来源于stack exchange,提问作者P.Bjur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:49