Code: Select all
from fastapi import APIRouter, FastAPI, Request, HTTPException, Response, status
from starlette.middleware.base import BaseHTTPMiddleware
from fastapi.responses import JSONResponse
class ExceptionHandlerMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
try:
return await call_next(request)
except HTTPException as e:
return JSONResponse(status_code=e.status_code, content={'message': e.detail})
except Exception as e:
return JSONResponse(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={'message': str(e)})
# app creation and config go here....
app.add_middleware(ExceptionHandlerMiddleware)
Fastapis Dokumentation gibt eine Möglichkeit, das Standardverhalten für bestimmte Ausnahmen zu überschreiben, dies ist jedoch langweilig und nicht skalierbar. Gibt es eine Möglichkeit, alle Ausnahmebehandlung global zu erzwingen, um meine Middleware zu durchlaufen? (Bonuspunkte, wenn jemand einen Weg kennt, dies ohne Dekorateure zu tun, wie eine Anforderung, die ich nicht verwendet habe.)