from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request from starlette.responses import JSONResponse, Response class RequestSizeLimitMiddleware(BaseHTTPMiddleware): def __init__(self, app, max_body_size: int) -> None: super().__init__(app) self._max_body_size = max_body_size async def dispatch(self, request: Request, call_next) -> Response: content_length = request.headers.get("content-length") if content_length and int(content_length) > self._max_body_size: return JSONResponse( status_code=413, content={ "error": { "code": "request_too_large", "message": "Request body is too large.", } }, ) return await call_next(request)