Фастапи. Как получить запрос.тело из плагина starlette-контекст?

#python #request #fastapi #httpcontext #starlette

Вопрос:

Я использую fastapi для создания веб-сайта и хочу получить request.body() доступ для входа в систему. Я импортирую starlette-context==0.3.3 , чтобы получить глобальный контекст из запроса.

Поскольку плагин по умолчанию может получать переменную только из request.header , мне нужно написать плагин, чтобы получить request.body()

Я мог бы легко получить какую-нибудь переменную , например request.url , но я, когда я пишу плагин, чтобы получить тело моего запроса, у меня возникла проблема «RuntimeWarning: сопрограмма» Request.body «никогда не ожидалась», и мой маршрут fastapi не мог получить ни одного запроса.

Мой код плагина таков :

 from typing import Any, Optional, Union

from starlette.requests import HTTPConnection, Request
from starlette_context.plugins import Plugin

class BodyPlugin(Plugin):
    key = "body"

    async def process_request(
        self, request: Union[Request, HTTPConnection]
    ) -> Optional[Any]:
        body = await request.body()

        return body
 

И мое промежуточное программное обеспечение находится ниже:

 middleware = [
    Middleware(
        ContextMiddleware,
        plugins=(
            BodyPlugin()
        )
    )
]