public override async Task <InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
        {
            var request = context.HttpContext.Request;

            string data  = await new StreamReader(request.Body, UTF8WithoutBom).ReadToEndAsync();
            var    bytes = Encoding.UTF8.GetBytes(data.ToCharArray());

            request.Body.Position = 0;
            try
            {
                using (var memoryStream = await _memoryStreamPool.GetMemoryStream(bytes))
                {
                    var output = _serializer.Deserialize(memoryStream, context.ModelType);
                    return(InputFormatterResult.Success(output));
                }
            }
            catch (Exception ex)
            {
                using (var memoryStream = await _memoryStreamPool.GetMemoryStream(bytes))
                {
                    using (var reader = new StreamReader(memoryStream))
                    {
                        var requestData = await reader.ReadToEndAsync();

                        ex.Data["requestBody"] = requestData;
                        throw ex;
                    }
                }
            }
        }
        public override async Task <object> ReadFromStreamAsync(Type type, Stream readStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger, CancellationToken cancellationToken)
        {
            var bytes = await ReadStreamAsync(readStream);

            try
            {
                using (var memoryStream = await _memoryStreamPool.GetMemoryStream(bytes))
                {
                    return(_serializer.Deserialize(memoryStream, type));
                }
            }
            catch (Exception ex) when(ex is BaseApplicationException == false)
            {
                using (var memoryStream = await _memoryStreamPool.GetMemoryStream(bytes))
                {
                    using (var reader = new StreamReader(memoryStream))
                    {
                        var request = await reader.ReadToEndAsync();

                        ex.Data["requestBody"] = request;
                        throw;
                    }
                }
            }
        }
 protected virtual async Task <byte[]> GetSerializedData(object data, ISerializer serializer, CancellationToken cancellationToken)
 {
     using (new ProfileContext("session data - serialize"))
     {
         using (var stream = await _memoryStreamPool.GetMemoryStream(cancellationToken))
         {
             serializer.Serialize(stream, data);
             return(stream.ToArray());
         }
     }
 }
Beispiel #4
0
        private async Task <byte[]> Serialize <T>(T value)
        {
            byte[] serializedValue;

            if (value is byte[])
            {
                return(serializedValue = value as byte[]);
            }

            var serializer = _serializerFactory.Create(typeof(T));

            using (new ProfileContext("State serialization"))
                using (var outputStream = await _memoryStreamPool.GetMemoryStream())
                {
                    serializer.Serialize(outputStream, value);
                    serializedValue = outputStream.ToArray();
                }

            return(serializedValue);
        }
 private async Task <MemoryStream> CreateStreamAsync()
 {
     if (_memoryStreamPool == null)
     {
         return(new MemoryStream());
     }
     else
     {
         return(await _memoryStreamPool.GetMemoryStream());
     }
 }