Quantcast
Channel: ASPNETWebStack Issue Tracker Rss Feed
Viewing all articles
Browse latest Browse all 7215

Commented Issue: Bug: serialisation-deserialisation loses UserAgent.Count [303]

$
0
0
When I deserialise-serialise-deserialise and compare request and request2 in code below, UserAgent header has the correct .ToString() value but count is 0. So my unit test was failing:


var stream = new FileStream("Request.bin", FileMode.Open);
var serializer = new MessageContentHttpMessageSerializer();
var request = serializer.DeserializeToRequest(stream);

var memoryStream = new MemoryStream();
serializer.Serialize(request, memoryStream);

memoryStream.Position = 0;
var request2 = serializer.DeserializeToRequest(memoryStream);

Comments: This problem seems to not exist in current source and only in RTM. The code for HttpMessageContent has changed to allow dealing with UserAgent differently. _______________________________________________________________________________________________________ This is MessageContentHttpMessageSerializer: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text; namespace WebApiContrib.Serialization { public class MessageContentHttpMessageSerializer { 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; } } }

Viewing all articles
Browse latest Browse all 7215

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>