Cannot access a closed Stream / Reading is not allowed after reader was completed

Имею такой сервис.

При ее вызове есть 4 исхода

  1. Сервис отрабатывает нормально

  2. Получаю ошибку - Cannot access a closed Stream.

  3. Получаю ошибку - Reading is not allowed after reader was completed.

  4. Получаю ошибку - Cannot access a disposed object. Object name: 'HttpRequestStream'.

     public async void InputDataValidation2()
            {
                var charset = "utf-8";
                var logFile = $"{Guid.NewGuid().ToString("N")}.txt";
    
                var outerRequest = HttpContext.Request;
                var outerResponse = HttpContext.Response;
    
                try
                {   
                    outerRequest.Body.Seek(0, SeekOrigin.Begin);
                    var bytes = new Memory<byte>(new byte[outerRequest.ContentLength ?? 0]);
                    await outerRequest.BodyReader.AsStream().ReadAsync(bytes);
                    var body = Encoding.GetEncoding(charset).GetString(bytes.ToArray());
    
                    log(body, logFile);
    
                    var jsonRequest = JsonConvert.DeserializeObject<InputJsonValidationRequest>(body);
    
                    var result = InputDataValidation(jsonRequest);
    
                    body = JsonConvert.SerializeObject(result);
    
                    log(body, logFile);
    
                    bytes = new Memory<byte>(Encoding.GetEncoding(charset).GetBytes(body));
    
                    outerResponse.ContentType = "application/json; charset=utf-8";
    
                    await outerResponse.BodyWriter.WriteAsync(bytes);
                }
                catch (Exception e)
                {
                    log(e.Message, logFile);
    
                    var body = JsonConvert.SerializeObject(new InputJsonValidationResponse {
                        resultCode = -1,
                        resultMessage = e.Message
                    });
    
                    var bytes = new Memory<byte>(Encoding.GetEncoding(charset).GetBytes(body));
                    outerResponse.StatusCode = 500;
                    await outerResponse.BodyWriter.WriteAsync(bytes);
                }
            }
    

В чем может быть дело?


  string log(string msg, string fileName = null) {
            if (null == fileName) fileName = $"{Guid.NewGuid().ToString("N")}.txt";
            using (StreamWriter sr = new StreamWriter($"{logDirectory}\\{fileName}", true))
            {
                sr.WriteLine(msg);
                sr.Close();
            }
            return fileName;
        }

Ответы (0 шт):