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
相关产品推荐
相关产品推荐

