diff --git a/fastapi/routing.py b/fastapi/routing.py index 9b51f03cac562..3cf35f5095659 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -184,7 +184,9 @@ async def app(request: Request) -> Response: 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": diff --git a/tests/test_tutorial/test_body/test_tutorial001.py b/tests/test_tutorial/test_body/test_tutorial001.py index c90240ae4c349..7bf62c907db79 100644 --- a/tests/test_tutorial/test_body/test_tutorial001.py +++ b/tests/test_tutorial/test_body/test_tutorial001.py @@ -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 = {