Reputation: 127
Front end:
await axios.put('/api/updategardensize', { gardenSize :'haha'} ,{withCredentials: true})
Backend API ENDPOINT IS:
@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(request: Request , gardenSize: str):
422 Unprocessable Entity- I've tried every combination. Can anyone figure this one out?
Upvotes: 1
Views: 16
Reputation: 228
FastAPI expects request bodies to be structured using Pydantic models. Instead of passing gardenSize: str directly as a function parameter, define a Pydantic model:
from fastapi import FastAPI, Request, Depends
from pydantic import BaseModel
from starlette import status
app = FastAPI()
class GardenSizeUpdate(BaseModel):
gardenSize: str
@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(data: GardenSizeUpdate):
return {"message": f"Garden size updated to {data.gardenSize}"}
If you don't want to use Pydantic, you can manually parse the request body:
@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(request: Request):
body = await request.json()
garden_size = body.get("gardenSize")
return {"message": f"Garden size updated to {garden_size}"}
However, the Pydantic model approach is the best practice since it enforces type validation automatically.
Upvotes: 2