Как завернуть Request.Content в кастомный Stream доступный для всех Middlerware и контроллеров?

Добрый день, есть 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... Но хотелось бы не использовать этот вариант, так как ВСЕ контроллеры надо будет переписать на этот подход.
  • Вопрос задан
  • 14 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы