问题描述
我用的是FastAPI,我想定义一个中间件,在里面可以截取前端传递过来的加密参数并解密,用解密后的参数替换原来的参数,我该怎么做? 我试过了
body = await request.body()
request._body = body
我也试过
async def set_body(request: Request,body: bytes):
async def receive() -> Message:
return {"type": "http.request","body": body}
request._receive = receive
async def get_body(request: Request) -> bytes:
body = await request.body()
set_body(request,body)
return body
================================================ ============================
class GzipRequest(Request):
async def body(self) -> bytes:
# if not hasattr(self,"_body"):
body = await super().body()
# if "gzip" in self.headers.getlist("content-encoding"):
# body = gzip.decompress(body)
self._body = body
return self._body
class GzipRoute(APIRoute):
def get_route_handler(self) -> Callable:
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
request = GzipRequest(request.scope,request.receive)
return await original_route_handler(request)
return custom_route_handler
app.router.route_class = GzipRoute
这个方法我也测试过了,还是不行!
================================================ ================
我已经通过app.router.route_class = GzipRoute
解决了这个问题,
主要提示:在另一个类中定义路由时,还需要制作一个路由类,例如:
router = APIRouter(route_class=GzipRoute)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)