Добрый день, есть ApiController который получает POST'ом огромный Json (~200-500MB). Он нормально обрабатывается с помощью stream'ов => минимально возможная загрузка памяти.
Задача: логировать ВСЕ запаросы перед обработкой их контроллерами.
Видел кучу примеров где создаётся Middleware который делает "копию" запроса с помощью:
_request.Content = await request.Content.ReadAsByteArrayAsync();
НО даже если получать Stream а потом его копировать на диск аля stream.CopyTo -> в памяти всё равно сохраняется "копия"...
Вопрос: Можно как-нибудь в "первом" middleware завернуть Request.Content.ReadAsStreamAsync() в какой нибудь кастомный shallow-copy-stream... чтобы для логирования и в контроллере Request.Content "читался" только ОДИН раз?
Как вариант - в "первом" middlerware сохранять stream в temp и в последующих контроллерах читать "с диска" по correlationid... Но хотелось бы не использовать этот вариант, так как ВСЕ контроллеры надо будет переписать на этот подход.