]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
♻ Assume request bodies contain JSON when no Content-Type header is provided (#3456)
authorSebastián Ramírez <tiangolo@gmail.com>
Sat, 3 Jul 2021 16:25:12 +0000 (18:25 +0200)
committerGitHub <noreply@github.com>
Sat, 3 Jul 2021 16:25:12 +0000 (18:25 +0200)
fastapi/routing.py
tests/test_tutorial/test_body/test_tutorial001.py

index 9b51f03cac5622c03e48cee18b7e7a11be3ad6a4..3cf35f5095659aef102acaf9c2815de47d05d614 100644 (file)
@@ -184,7 +184,9 @@ def get_request_handler(
                     if body_bytes:
                         json_body: Any = Undefined
                         content_type_value = request.headers.get("content-type")
-                        if content_type_value:
+                        if not content_type_value:
+                            json_body = await request.json()
+                        else:
                             message = email.message.Message()
                             message["content-type"] = content_type_value
                             if message.get_content_maintype() == "application":
index c90240ae4c34948725e6a07c96f9948853e5d3f7..7bf62c907db79a7e5f96fcc22b0214ceabd7984c 100644 (file)
@@ -229,6 +229,20 @@ def test_geo_json():
     assert response.status_code == 200, response.text
 
 
+def test_no_content_type_is_json():
+    response = client.post(
+        "/items/",
+        data='{"name": "Foo", "price": 50.5}',
+    )
+    assert response.status_code == 200, response.text
+    assert response.json() == {
+        "name": "Foo",
+        "description": None,
+        "price": 50.5,
+        "tax": None,
+    }
+
+
 def test_wrong_headers():
     data = '{"name": "Foo", "price": 50.5}'
     invalid_dict = {