当前位置: 首页 > wzjs >正文

淮南网站制作公司电脑手机网站相互跳转

淮南网站制作公司,电脑手机网站相互跳转,泰州做网站多少钱,手机怎么在微信公众号发文章介绍 ✅ 什么是 Catch-All 路由? Catch-All 路由 指的是:一个能匹配“任意路径”的通配型路由。 它一般会使用 路径参数 path 类型,比如: app.get("/{full_path:path}") async def fallback_handler(full_path: str):…

介绍

✅ 什么是 Catch-All 路由?

Catch-All 路由 指的是:一个能匹配“任意路径”的通配型路由。

它一般会使用 路径参数 path 类型,比如:

@app.get("/{full_path:path}")
async def fallback_handler(full_path: str):return {"msg": f"You visited: {full_path}"}

这个 / 开头的 /{full_path:path},意思是:
• 匹配任何以 / 开头的请求;
• 把完整的路径作为字符串传入 full_path;
• 哪怕路径是 /foo/bar/hello.jpg,它也能匹配!

所以叫 Catch-All,就像“最后一个网兜”,你没被其他精确路径命中,就会掉进去。

URL 路由匹配机制的一部分,和代码有没有 try-catch 是两码事。

部分含义
/所有路径的开头
{full_path}这是一个路径参数,名字叫 full_path
:path是这个参数的“类型转换器”

🔍 :path 是什么意思?

类型描述
str默认,只匹配不含斜杠 / 的一段
int匹配整数
float匹配浮点数
path✅ 匹配多段路径(包括斜杠 /)

就意味着这个路由会匹配所有请求路径,无论路径有多少层!

也正因如此,它常被叫做 Catch-All(兜底)路由,用于前端 SPA 项目的前端路由支持。

@app.get("/api/user")
def user(): ...@app.get("/api/task")
def task(): ...@app.get("/{path:path}")
def fallback(path): ...

访问 /api/user 会进入 user(),访问 /api/task 会进入 task()。

但如果你访问:

• /api/does-not-exist → ❗ 不会 404!

• 会进入 fallback(path),path == “api/does-not-exist”

这就叫 Catch-All。

路由顺序

  1. 它是匹配所有路径的,如果注册早了,就会“截胡”所有后面的路由。

  2. FastAPI 按照注册顺序来判断匹配优先级,谁先注册,谁优先。

  3. 如果 Catch-All 早注册,那就没有“后面”了,你的 /api/v1/** 根本用不上!

🎯 问题核心:setup_admin(app) 是个「兜底路由(catch-all)」

SQLAdmin 或类似的后台管理插件,一般都会注册一个这样的路由:

@app.get("/{full_path:path}")
async def catch_all_route(full_path: str): ...

🚨 所有未被上面 include_router 明确匹配到的路径请求,都会被这个 catch-all 捕获处理。

• 本来这个应该走 user_router 的 CORS 预检流程;

但是如果这个路由在 setup_admin(app) 之后注册了,那么 catch-all 路由先注册,它就优先匹配了!

• 而 catch-all 路由并不会处理跨域(CORS OPTIONS 请求);

• 所以浏览器就报了 CORS 跨域错误 ⚠️

# 1. 注册所有业务接口
app.include_router(api_router1)
app.include_router(api_router2)# 2. 注册 SQLAdmin(会用 catch-all)
setup_admin(app)# 3. 注册前端静态资源路由(if any)
app.include_router(web_router.router)

路由找不到报CORS?

FastAPI 的中间件执行顺序 + catch-all 路由的作用范围 + CORS 的工作机制

app.add_middleware(CORSMiddleware,  # 跨域处理allow_origins=["*"],allow_credentials=True,allow_methods=["*"],  # 允许所有方法allow_headers=["*"],  # 允许所有头部
)

✅ 你已经注册了 CORSMiddleware,那为啥还报跨域?

上述代码:

所有经过 FastAPI 路由匹配成功的请求(包括 OPTIONS 预检请求)都会自动添加 Access-Control-Allow-* 相关响应头从而避免跨域错误!

❌ 但为什么“未命中的路由”还会报跨域?

这是核心重点:

🔥CORS 中间件只作用于:能被 FastAPI 接收到的请求

⚠️ 如果这个 Catch-All 路由没有处理 CORS,结果就是:

  1. 浏览器先发出 预检请求 OPTIONS /api/v1/xxx

  2. FastAPI 查找路由匹配不到(因为这个接口没注册或被覆盖);

  3. 匹配到你的 Catch-All;

  4. 但 Catch-All 没有注册 OPTIONS 方法;

  5. FastAPI 返回 405 或 404;

  6. CORSMiddleware 不生效(它只对合法路由生效);

  7. 浏览器就 报跨域错误

这一段已经告诉 FastAPI:我允许跨域请求,包括 OPTIONS 方法。

但!!!问题的关键不是你有没有加 allow_methods=[“*”],而是:

❗ 请求路径 /some/path 根本没注册任何路由!也就没有任何 handler 能接住 OPTIONS 请求!

你要知道:

FastAPI 的 CORS 中间件只会对 存在的路由 生效

❌ 所以:如果你的某个路径根本没被 app.include_router() 注册

比如请求的是 /aichat/pub_agent/expend/dict/,但你没有注册它,那么:

• FastAPI 连 OPTIONS 都不知道该交给谁处理

• 它直接走到了 404 或 405

• 然后 CORS middleware 根本不会处理它

• ✅ 最终结果:浏览器就看到一个没有 CORS headers 的响应,报 CORS error

[请求进来]↓
中间件先处理 (CORSMiddleware 会拦截 OPTIONS 请求)↓
如果请求路径存在 → CORSMiddleware 会自动响应 OPTIONS 并添加 CORS headers ✅↓
如果请求路径不存在 → 中间件不处理,FastAPI 抛出 404

✔ 方法一:确认你的 catch-all 路由支持 OPTIONS 请求

@router.api_route("/{full_path:path}", methods=["GET", "POST", "OPTIONS"])
async def catch_all(full_path: str, request: Request):...

⚠️ 即使你什么都不做,也得让它 return 一个空的响应,这样 CORSMiddleware 就会处理它。

✔ 方法二:手动添加一个兜底的 OPTIONS 响应

from fastapi.responses import Response@router.options("/{full_path:path}")
async def options_handler(full_path: str):return Response()
原因说明
CORS 中间件只对匹配成功的路由生效OPTIONS 预检必须也要命中
Catch-All 如果不支持 OPTIONS,就会报错浏览器就会认为是跨域失败
路由顺序、注册方式影响是否生效后注册的 Catch-All 可能覆盖其他逻辑
http://www.dtcms.com/wzjs/816748.html

相关文章:

  • seo基础知识宁波网络优化seo报价
  • 商城模板网站模板免费下载桂林两江四湖环城水系图
  • 网站做第三方登录界面做微网站价格
  • wordpress建站位置青岛建设局官方网站
  • 西安网站建设开发公司怎么样wordpress静态化好处
  • 网站建设额梵克雅宝
  • 崇义网站建设银川网站建设怎么样
  • 网站首页专题怎么做好的广告片拍摄制作公司
  • 展示类网站模板静态网站是什么意思
  • 如何做短信验证码网站三丰云做网站步骤
  • 盘锦做网站谁家好三拼域名做网站长不长
  • 化州+网站建设wordpress关闭手机主题
  • 西安商城网站建设制作个人淘客网站备案
  • 创意网站设计 高端网站开发怎么才能接到私活
  • 电商网站建设培训北京网站建设最便宜的公司
  • 赣州人才网站网站建设项目延期验收申请报告
  • html制作个人主页免费的seo优化
  • 物流公司做网站需求有意义的网站
  • 综合购物网站排名wordpress要的留邮箱
  • dw建设网站北京网站备案速度
  • 网站怎么做数据转移怎么登陆 wordpress
  • 宿迁网站建设价位wordpress二维码 插件下载
  • 关于网站建设的合同协议书青岛城乡建筑设计院有限公司
  • 公司做一个网站如何定位网站建设视频万网
  • wordpress 潜在威胁网站建设seo优化的好处
  • 做职业资格考试的网站有哪些王也动漫
  • 定制网站开发都提供那些东西成都微信小程序开发
  • discuz 网站备案信息代码网页制作培训前景
  • 设计师接私单做网站做网站要哪些人员
  • 网站制作最新技术的青岛网络推广教程