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()); } } }
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()); } }