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

如何在FastAPI路由函数中获取全局依赖的返回值

问题解答

可以在read_items路由函数中获取到verify_key依赖的返回值,FastAPI在单个请求的生命周期内会对相同依赖做缓存,同一个依赖只会执行一次,不会重复触发Header校验逻辑,没有额外性能损耗。

推荐实现方式

方式1:路由显式声明依赖(无需修改原有依赖代码)

直接在路由函数的参数中再次声明verify_key依赖即可拿到返回值,全局注入的依赖和路由参数的依赖会共享执行结果,校验逻辑只会运行一次:

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_key(x_key: str = Header(...)):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_key)])


@app.get("/items/")
# 直接在此处添加依赖声明即可拿到返回值,不会重复执行verify_key
async def read_items(x_key: str = Depends(verify_key)):
    # 这里可以直接使用拿到的x_key
    print("拿到的X-Key为:", x_key)
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]

方式2:依赖写入request.state(适合多路由复用场景)

如果有大量路由都需要用到x_key值,可以修改verify_key依赖把值写入请求对象的state属性,后续所有路由都可以通过注入Request对象直接取值:

from fastapi import Depends, FastAPI, Header, HTTPException, Request


async def verify_key(x_key: str = Header(...), request: Request = None):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    # 将x_key写入请求状态
    request.state.x_key = x_key
    return x_key


app = FastAPI(dependencies=[Depends(verify_key)])


@app.get("/items/")
async def read_items(request: Request):
    # 直接从request.state中取值
    x_key = request.state.x_key
    print("拿到的X-Key为:", x_key)
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]

版本兼容性说明

上述两种写法在你的运行环境FastAPI 0.68.0 + Python 3.8中完全可用,无兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:51:03