FastAPI无法从Header参数获取数据,请求协助排查问题
排查FastAPI Header参数无法获取的问题
从最容易踩坑的点逐一排查:
请求头命名匹配问题
FastAPI会自动将函数参数的下划线格式转换成HTTP请求头的连字符格式,比如你代码里的x_token,对应的请求头应该是X-Token(首字母大写,下划线转连字符)。别在Postman/Insomnia里填成x_token或者X_token,这都匹配不上。修正代码里的语法错误
你试的另外两种写法本身存在语法问题:- 第二种少了右括号:
def testing_header(x_token: str = Header():应补全为def testing_header(x_token: str = Header(default=None)): - 第三种把
default拼写成了defalt,会导致参数默认值无法正确设置,直接引发报错。
正确的基础写法可以用你最开始的Annotated版本(Python<3.9需提前安装typing-extensions),或者简化版:
from fastapi import FastAPI, Header app = FastAPI() @app.get('/hello') def testing_header(x_token: str | None = Header(default=None)): return {'header': x_token}- 第二种少了右括号:
验证请求工具的头是否正确添加
在Postman/Insomnia的Headers标签下,新增一条配置:- Key:
X-Token - Value: 任意测试值(比如
test123)
发送GET请求到http://localhost:8000/hello,查看返回结果是否能拿到填入的测试值。
- Key:
用FastAPI自带文档测试
启动服务后访问http://localhost:8000/docs,找到/hello接口点击"Try it out",在Request Headers栏填写X-Token的值后发送请求。如果这里能正常返回值,说明是测试工具操作有误;如果仍无效,再检查代码和环境。检查FastAPI版本与依赖
若使用旧版FastAPI(<0.95.0),Annotated写法需要额外安装typing-extensions包,可执行pip install typing-extensions尝试解决。也可以直接用旧版兼容写法:def testing_header(x_token: str = Header(None)):排查中间件影响
如果你添加了CORS中间件或自定义中间件,检查是否存在修改、过滤请求头的逻辑,比如部分中间件会移除非标准头,导致X-Token被拦截。
内容的提问来源于stack exchange,提问作者Alojarf
相关产品推荐
相关产品推荐

