使用FastAPI时出现"Method Not Allowed"错误的问题排查
问题分析与解决
核心问题有两个:
1. 请求方法不匹配
你的接口用@app.post("/predict")声明为POST请求,但直接在浏览器地址栏输入URL访问时,浏览器默认发送的是GET请求,这就导致了"Method Not Allowed"错误——接口只接受POST,你发了GET,自然不允许。
2. 参数定义不符合FastAPI规范
你直接写request: str,FastAPI会把这个参数当成URL查询参数(比如/predict?request=xxx),但POST接口通常是从请求体里接收数据,这样的定义会导致即便用POST请求,也无法正确获取参数。
修复后的代码示例
方案一:用POST接收请求体字符串
from fastapi import FastAPI, Body app = FastAPI() @app.post("/predict") def predict_(request: str = Body(...)): return {"message": 'Hellooo!', "received_content": request}
方案二:改成支持GET请求(方便浏览器直接测试)
from fastapi import FastAPI app = FastAPI() @app.get("/predict") def predict_(request: str): return {"message": 'Hellooo!', "received_content": request}
这时你可以在浏览器访问http://localhost:8000/predict?request=测试内容来验证。
测试POST接口的正确方式
如果用方案一的POST接口,别用浏览器地址栏,换这两种方式:
- 用FastAPI自带的文档页面:访问
http://localhost:8000/docs,找到/predict接口,点击"Try it out"就能发送POST请求 - 命令行用curl:
curl -X POST "http://localhost:8000/predict" -H "Content-Type: application/json" -d '{"request": "你的测试文本"}'
内容的提问来源于stack exchange,提问作者Minions
相关产品推荐
相关产品推荐

