Skip to content

Instantly share code, notes, and snippets.

@thefringeninja
Forked from lucamilan/gist:3238005
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thefringeninja/f528545f88fd1ec6a24a to your computer and use it in GitHub Desktop.
Save thefringeninja/f528545f88fd1ec6a24a to your computer and use it in GitHub Desktop.
public interface IHttpMessageSerializer
{
void Serialize(HttpResponseMessage response, Stream stream);
void Serialize(HttpRequestMessage request, Stream stream);
HttpResponseMessage DeserializeToResponse(Stream stream);
HttpRequestMessage DeserializeToRequest(Stream stream);
}
public class MessageContentHttpMessageSerializer : IHttpMessageSerializer
{
private bool _bufferContent;
public MessageContentHttpMessageSerializer() : this(false)
{
}
public MessageContentHttpMessageSerializer(bool bufferContent)
{
_bufferContent = bufferContent;
}
public void Serialize(HttpResponseMessage response, Stream stream)
{
byte[] assuranceBuffer = null;
if (_bufferContent && response.Content != null)
assuranceBuffer = response.Content.ReadAsByteArrayAsync().Result; // make sure it is buffered
var httpMessageContent = new HttpMessageContent(response);
var buffer = httpMessageContent.ReadAsByteArrayAsync().Result;
stream.Write(buffer, 0, buffer.Length);
}
public void Serialize(HttpRequestMessage request, Stream stream)
{
byte[] assuranceBuffer = null;
if (_bufferContent && request.Content != null)
assuranceBuffer = request.Content.ReadAsByteArrayAsync().Result; // make sure it is buffered
var httpMessageContent = new HttpMessageContent(request);
var buffer = httpMessageContent.ReadAsByteArrayAsync().Result;
stream.Write(buffer, 0, buffer.Length);
}
public HttpResponseMessage DeserializeToResponse(Stream stream)
{
var response = new HttpResponseMessage();
var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
response.Content = new ByteArrayContent(memoryStream.ToArray());
response.Content.Headers.Add("Content-Type", "application/http;msgtype=response");
return response.Content.ReadAsHttpResponseMessageAsync().Result;
}
public HttpRequestMessage DeserializeToRequest(Stream stream)
{
var request = new HttpRequestMessage();
var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
request.Content = new ByteArrayContent(memoryStream.ToArray());
request.Content.Headers.Add("Content-Type", "application/http;msgtype=request");
return request.Content.ReadAsHttpRequestMessageAsync().Result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment