From d0950a2cbc62095d19ea0204955f9ecd3d9f0395 Mon Sep 17 00:00:00 2001 From: Yurii Motov Date: Sun, 15 Feb 2026 07:33:25 +0100 Subject: [PATCH] Fix handling router prefix --- fastapi/routing.py | 2 +- tests/test_apirouter_mount.py | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index f5db323cb..9e8af2ef5 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -1003,7 +1003,7 @@ class APIRouter(routing.Router): raise FastAPIError( "APIRouter does not support mounting ASGI applications other than StaticFiles." ) - self._mount(path=path, app=app, name=name) + self._mount(path=self.prefix + path, app=app, name=name) def _mount(self, path: str, app: ASGIApp, name: str | None = None) -> None: super().mount(path=path, app=app, name=name) diff --git a/tests/test_apirouter_mount.py b/tests/test_apirouter_mount.py index 6c0bb89a8..48e0ec3a1 100644 --- a/tests/test_apirouter_mount.py +++ b/tests/test_apirouter_mount.py @@ -8,18 +8,33 @@ from fastapi.testclient import TestClient @pytest.mark.parametrize("root_path", ["", "/v1"]) -def test_mount_static_files_to_apirouter(tmp_path: Path, root_path: str): +@pytest.mark.parametrize( + ("router_prefix", "include_prefix", "request_prefix"), + [ + ("", "", ""), + ("/router", "", "/router"), + ("", "/router_1", "/router_1"), + ("/router", "/router_1", "/router_1/router"), + ], +) +def test_mount_static_files_to_apirouter( + tmp_path: Path, + root_path: str, + router_prefix: str, + include_prefix: str, + request_prefix: str, +): static_asset = tmp_path / "index.html" static_asset.write_text("Hello, World!") - router = APIRouter() + router = APIRouter(prefix=router_prefix) router.mount("/static", StaticFiles(directory=tmp_path), name="static") app = FastAPI(root_path=root_path or None) - app.include_router(router) + app.include_router(router, prefix=include_prefix) client = TestClient(app) - response = client.get(f"{root_path}/static/index.html") + response = client.get(f"{root_path}{request_prefix}/static/index.html") assert response.status_code == 200 assert response.text == "Hello, World!"