AlexXYZ
@AlexXYZ
O Keep Clear O

C# Request.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult() можно ли вызвать два раза подряд на одном Request?

Всем привет.

Обрабатываю тело POST запроса на сервере и получаю содержимое методом:
byte[] arr_body = Request.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();

5bb2323fa37f4063368025.png
Не является ли ошибкой после применения такого метода повторно вызывать методы чтения входного потока ещё раз, например:

NameValueCollection nvc = Request.Content.ReadAsFormDataAsync().GetAwaiter().GetResult();
или
MultipartMemoryStreamProvider multipart_request = Request.Content.ReadAsMultipartAsync().GetAwaiter().GetResult();

В принципе схема работает и всё читается по второму разу, но действительно ли это допустимо?

P.S.
На Java такой номер не проходил и если я читал один раз данные из Request, то второй раз уже выдавалось исключение.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@basrach
По факту эти методы перечитывают поток. В данном случае "поток" чисто абстракция, а данные на самом деле лежат в памяти. В принципе, если вызвать ReadAsStreamAsync на Response.Content, прочитать этот поток и закрыть его, а затем еще раз попытаться прочитать, то тоже будет исключение. В дот.нет конкретно эти два метода реализованы так, что они не закрывают поток после использования, а читают каждый раз его сначала.
Допустимо ли это? С чисто технической стороны, если это работает, то почему бы и нет. А не с технической нужно руководствоваться принципом наименьшего удивления.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sunblossom
Вы платите временем процессора, экономя оперативку. Только и всего. Тут уже зависит от того, чего у вас больше.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы