From: Robert Hofer <1058012+hofrob@users.noreply.github.com> Date: Sat, 20 Sep 2025 18:44:43 +0000 (+0200) Subject: ✨ Allow `None` as return type for bodiless responses (#9425) X-Git-Tag: 0.117.0~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b51ec36f2e442495de5e4c22ae51a8f5c44917eb;p=thirdparty%2Ffastapi%2Ffastapi.git ✨ Allow `None` as return type for bodiless responses (#9425) Co-authored-by: Sebastián Ramírez --- diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 8dd0a14c8..dc663f548 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -254,6 +254,8 @@ def get_typed_annotation(annotation: Any, globalns: Dict[str, Any]) -> Any: if isinstance(annotation, str): annotation = ForwardRef(annotation) annotation = evaluate_forwardref(annotation, globalns, globalns) + if annotation is type(None): + return None return annotation diff --git a/tests/test_return_none_stringified_annotations.py b/tests/test_return_none_stringified_annotations.py new file mode 100644 index 000000000..be052d532 --- /dev/null +++ b/tests/test_return_none_stringified_annotations.py @@ -0,0 +1,17 @@ +import http + +from fastapi import FastAPI +from fastapi.testclient import TestClient + + +def test_no_content(): + app = FastAPI() + + @app.get("/no-content", status_code=http.HTTPStatus.NO_CONTENT) + def return_no_content() -> "None": + return + + client = TestClient(app) + response = client.get("/no-content") + assert response.status_code == http.HTTPStatus.NO_CONTENT, response.text + assert not response.content