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

FastAPI多API端点路径参数匹配异常,非对应方法被执行求助

FastAPI路由匹配异常问题解决

问题原因

FastAPI的路由匹配是按代码定义的顺序进行前缀匹配的。你的第一个路由/project/{project_id}/{employee_id}是动态参数路由,会匹配所有符合/project/xxx/xxx格式的请求——当你访问/project/details/123或/project/metadata/456时,FastAPI会把details/metadata当成project_id的参数值,把后面的ID当成employee_id,直接触发method_one,完全不会走到后面的端点2和3。

另外注意:你原来的method_one函数参数里写了organization_id: str,但路由路径里是{employee_id},这会导致参数不匹配报错,也需要同步修正。

修复方案

调整路由的定义顺序,把带有静态前缀的路由(/project/details/、/project/metadata/)放在动态参数路由的前面,让FastAPI先匹配精确的静态路径,再匹配动态参数路径。

修复后的代码:

# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    try:
        return await CustomController.method_two(
            session=session, project_id=project_id
        )
    except Exception as e:
        return custom_exception_handler(e)

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    try:
        return await CustomController.method_three(
            session=session, project_id=project_id
        )
    except Exception as e:
        return custom_exception_handler(e)

# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(
    project_id: str, employee_id: str, session: AsyncSession = Depends(get_db)
):
    try:
        return await CustomController.method_one(
            session, project_id, employee_id
        )
    except Exception as e:
        return custom_exception_handler(e)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:50:25