You need to enable JavaScript to run this app. FastAPI中如何设置/*路径实现全路由捕获
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中如何设置/*路径实现全路由捕获

为什么直接写/*不生效

FastAPI底层的路由实现基于Starlette,路径匹配的语法规则和ExpressJS完全不通用——直接在路径字符串里写/*的形式不会被识别为通配匹配规则,因此所有访问请求都会触发FastAPI内置的404页面。

和ExpressJS全捕获等价的实现写法

FastAPI要匹配任意层级的全路径,需要借助内置的路径类型转换器:在路径参数后加上:path标记,就可以让这个参数匹配后续所有层级、包含斜杠的任意路径内容,完全等价于ExpressJS里/*的匹配效果。
可直接运行的示例代码:

from fastapi import FastAPI

app = FastAPI()

# 所有具体业务路由必须写在兜底路由的前面
# 示例:
# @app.get("/api/info")
# def get_info():
#     return {"status": "running"}

# 全路由GET捕获路由,放在文件最后注册
@app.get("/{full_path:path}")
def user_lost(full_path: str):
    return "Sorry You Are Lost !"

必看的注意事项

  • 不能漏写:path类型标记:如果只写/{full_path}没有加类型标记,这个参数仅能匹配单级路径,访问/a/b/c这类多级嵌套路径时依然会返回404。
  • 严格注意路由注册顺序:FastAPI按照代码从上到下的顺序匹配路由,一旦命中规则就直接返回结果。如果把全捕获路由放在具体业务路由的前面,所有定义好的业务路由都会被这个兜底逻辑拦截,完全无法正常访问,因此这类全捕获的兜底路由永远要放在所有业务路由的最后面。
  • 如果需要覆盖所有HTTP方法(GET、POST、PUT、DELETE等)的未定义请求,可以把装饰器换成@app.api_route("/{full_path:path}"),不需要逐一声明支持的请求方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 09:45:03