ASP.NET Identity 2.1 - Сброс пароля неверными токенами

Вот небольшое усовершенствование первого ответа от Despertar, которое мне очень помогло, но я столкнулся с проблемой при работе с двоичными данными. Промежуточный шаг извлечения потока в строку, а затем возврат его в массив байтов с использованием Encoding.UTF8.GetBytes(body) испортил двоичный контент (содержимое изменится, если оно не является кодировкой UTF8). Вот мое исправление, использующее Stream.CopyTo():

    public override async Task Invoke(IOwinContext context)
    {
        // read out body (wait for all bytes)
        using (var streamCopy = new MemoryStream())
        {
            context.Request.Body.CopyTo(streamCopy);
            streamCopy.Position = 0; // rewind

            string body = new StreamReader(streamCopy).ReadToEnd();
            // log body

            streamCopy.Position = 0; // rewind again
            context.Request.Body = streamCopy; // put back in place for downstream handlers

            await this.Next.Invoke(context);
        }
    }

Кроме того, MemoryStream приятно, потому что вы можете проверить длину потока до регистрации всего тела (чего я не хочу делать в случае кто-то загружает огромный файл).

0
задан Community 23 May 2017 в 11:44
поделиться