servers: Optional[List[Dict[str, Union[str, Any]]]] = None,
dependencies: Optional[Sequence[Depends]] = None,
default_response_class: Type[Response] = Default(JSONResponse),
+ redirect_slashes: bool = True,
docs_url: Optional[str] = "/docs",
redoc_url: Optional[str] = "/redoc",
swagger_ui_oauth2_redirect_url: Optional[str] = "/docs/oauth2-redirect",
self.dependency_overrides: Dict[Callable[..., Any], Callable[..., Any]] = {}
self.router: routing.APIRouter = routing.APIRouter(
routes=routes,
+ redirect_slashes=redirect_slashes,
dependency_overrides_provider=self,
on_startup=on_startup,
on_shutdown=on_shutdown,
--- /dev/null
+from fastapi import APIRouter, FastAPI
+from fastapi.testclient import TestClient
+
+
+def test_redirect_slashes_enabled():
+ app = FastAPI()
+ router = APIRouter()
+
+ @router.get("/hello/")
+ def hello_page() -> str:
+ return "Hello, World!"
+
+ app.include_router(router)
+
+ client = TestClient(app)
+
+ response = client.get("/hello/", follow_redirects=False)
+ assert response.status_code == 200
+
+ response = client.get("/hello", follow_redirects=False)
+ assert response.status_code == 307
+
+
+def test_redirect_slashes_disabled():
+ app = FastAPI(redirect_slashes=False)
+ router = APIRouter()
+
+ @router.get("/hello/")
+ def hello_page() -> str:
+ return "Hello, World!"
+
+ app.include_router(router)
+
+ client = TestClient(app)
+
+ response = client.get("/hello/", follow_redirects=False)
+ assert response.status_code == 200
+
+ response = client.get("/hello", follow_redirects=False)
+ assert response.status_code == 404