private static async Task <HttpContent> ToStreamContent(ObjectContent content)
        {
            Stream stream = await content.ReadAsStreamAsync();

            StreamContent streamContent = new StreamContent(stream);

            foreach (var header in content.Headers)
            {
                streamContent.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }

            return(streamContent);
        }
예제 #2
0
        public void PrimitiveTypesDeserializeAsOData(string typeString, Type type, object value)
        {
            HttpConfiguration configuration = new HttpConfiguration();

            ODataConventionModelBuilder model = new ODataConventionModelBuilder();
            model.EntitySet<WorkItem>("WorkItems");

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/WorkItems(10)/ID");
            request.Properties[HttpPropertyKeys.HttpConfigurationKey] = configuration;

            ODataMediaTypeFormatter formatter = CreateFormatter(model.GetEdmModel(), request);
            ObjectContent content = new ObjectContent(type, value, formatter, "application/xml");

            var stream = content.ReadAsStreamAsync().Result;
            Assert.Equal(
                value,
                formatter.ReadFromStreamAsync(type, stream, content, new Mock<IFormatterLogger>().Object).Result);
        }
예제 #3
0
        public void PrimitiveTypesDeserializeAsOData(string typeString, Type type, object value)
        {
            HttpConfiguration configuration = new HttpConfiguration();

            ODataConventionModelBuilder model = new ODataConventionModelBuilder();

            model.EntitySet <WorkItem>("WorkItems");

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/WorkItems(10)/ID");

            request.Properties[HttpPropertyKeys.HttpConfigurationKey] = configuration;

            ODataMediaTypeFormatter formatter = CreateFormatter(model.GetEdmModel(), request);
            ObjectContent           content   = new ObjectContent(type, value, formatter, "application/xml");

            var stream = content.ReadAsStreamAsync().Result;

            Assert.Equal(
                value,
                formatter.ReadFromStreamAsync(type, stream, content, new Mock <IFormatterLogger>().Object).Result);
        }
        /// <summary>
        /// Sets up a response for SendAsync
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="mock"></param>
        /// <param name="statusCode">The response status code</param>
        /// <param name="responseBody">Object to be rendered as Json in the response body</param>
        /// <returns></returns>
        public static IReturnsResult <TestableHttpMessageHandler> RespondsWith <T>(this IReturns <TestableHttpMessageHandler, Task <HttpResponseMessage> > mock,
                                                                                   HttpStatusCode statusCode, T responseBody)
        => mock.Returns(async(HttpRequestMessage request, CancellationToken token) => {
            var response = request.CreateResponse(statusCode);

            if (responseBody != null)
            {
                // Convert the input object into a stream and use this stream as the reponse's content.
                // This simulates real Http responses and helps detect deserialisation errors early

                var objectContent = new ObjectContent <T>(responseBody, new JsonMediaTypeFormatter());
                var stream        = await objectContent.ReadAsStreamAsync();

                var streamContent = new StreamContent(stream);
                streamContent.Headers.ContentType = objectContent.Headers.ContentType;

                response.Content = streamContent;
            }

            return(response);
        });
예제 #5
0
        public void RoundTripUsingBson()
        {
            //Arrange
            var formatters = new[] { new JsonNetFormatter() };
            var fromContact = new Contact { FirstName = "Brad", LastName = "Abrams" };

            // Act
            var fromContent = new ObjectContent<Contact>(fromContact, "application/bson", formatters);
            var contentReadStream = fromContent.ReadAsStreamAsync().Result;
            var newStream = new MemoryStream();
            contentReadStream.Position = 0;
            contentReadStream.CopyTo(newStream);
            newStream.Position = 0;
            var toContent = new ObjectContent<Contact>(new StreamContent(newStream), formatters);
            toContent.Headers.ContentType = new MediaTypeHeaderValue("application/bson");
            var toContact = toContent.ReadAsAsync<Contact>().Result;

            //Arrange
            Assert.AreEqual(fromContact.FirstName, toContact.FirstName);
            Assert.AreEqual(fromContact.LastName, toContact.LastName);
        }
        private Task <HttpContent> ToStreamContent(HttpContent content)
        {
            ObjectContent objectContent = content as ObjectContent;

            if (objectContent != null)
            {
                return(objectContent
                       .ReadAsStreamAsync()
                       .Then <Stream, HttpContent>(stream =>
                {
                    StreamContent streamContent = new StreamContent(stream);
                    foreach (var header in objectContent.Headers)
                    {
                        streamContent.Headers.TryAddWithoutValidation(header.Key, header.Value);
                    }

                    return streamContent;
                }));
            }
            else
            {
                return(TaskHelpers.FromResult(content));
            }
        }