public CollectionTest()
 {
     _formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Collection });
     _formatter.Request = GetSampleRequest();
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml);
 }
Beispiel #2
0
        internal static Task <HttpResponseMessage> CreateODataBatchResponseAsync(this HttpRequestMessage request, IEnumerable <ODataBatchResponseItem> responses, ODataMessageQuotas messageQuotas)
        {
            Contract.Assert(request != null);

            ODataVersion               odataVersion     = ODataMediaTypeFormatter.GetODataResponseVersion(request);
            IServiceProvider           requestContainer = request.GetRequestContainer();
            ODataMessageWriterSettings writerSettings   =
                requestContainer.GetRequiredService <ODataMessageWriterSettings>();

            writerSettings.Version       = odataVersion;
            writerSettings.MessageQuotas = messageQuotas;

            MediaTypeHeaderValue responseContentType = null;

            if (request.Headers.Accept.Any(
                    t => t.MediaType.Equals(ODataBatchHttpRequestMessageExtensions.BatchMediaTypeMime, StringComparison.OrdinalIgnoreCase)))
            {
                responseContentType = MediaTypeHeaderValue.Parse(
                    String.Format(CultureInfo.InvariantCulture, "multipart/mixed;boundary=batchresponse_{0}",
                                  Guid.NewGuid()));
            }
            else if (request.Headers.Accept.Any(
                         t => t.MediaType.Equals(ODataBatchHttpRequestMessageExtensions.BatchMediaTypeJson, StringComparison.OrdinalIgnoreCase)))
            {
                responseContentType = MediaTypeHeaderValue.Parse(ODataBatchHttpRequestMessageExtensions.BatchMediaTypeJson);
            }

            HttpResponseMessage response = request.CreateResponse(HttpStatusCode.OK);

            response.Content = new ODataBatchContent(responses, requestContainer, responseContentType);
            return(Task.FromResult(response));
        }
Beispiel #3
0
        private void IEnumerableOfEntityTypeSerializesAsODataFeed(string expectedContent, bool json)
        {
            ODataMediaTypeFormatter formatter = CreateFormatter();

            IEnumerable <Employee> collectionOfPerson = new Collection <Employee>()
            {
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 0),
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 1),
            };

            ObjectContent <IEnumerable <Employee> > content = new ObjectContent <IEnumerable <Employee> >(collectionOfPerson,
                                                                                                          formatter, json ? ODataMediaTypes.ApplicationJsonODataMinimalMetadata :
                                                                                                          ODataMediaTypes.ApplicationAtomXmlTypeFeed);

            string actualContent = content.ReadAsStringAsync().Result;

            if (json)
            {
                JsonAssert.Equal(expectedContent, actualContent);
            }
            else
            {
                RegexReplacement replaceUpdateTime = new RegexReplacement(
                    "<updated>*.*</updated>", "<updated>UpdatedTime</updated>");
                Assert.Xml.Equal(expectedContent, actualContent, replaceUpdateTime);
            }
        }
Beispiel #4
0
 private ODataMediaTypeFormatter CreateFormatter()
 {
     ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Feed });
     formatter.Request = GetSampleRequest();
     formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     return formatter;
 }
        public void PrimitiveTypesSerializeAsOData(string typeString, object value)
        {
            string expected = BaselineResource.ResourceManager.GetString(typeString);

            Assert.NotNull(expected);

            ODataConventionModelBuilder model = new ODataConventionModelBuilder();

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

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

            request.Properties[HttpPropertyKeys.HttpConfigurationKey] = configuration;

            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(model.GetEdmModel())
            {
                Request = request
            };

            Type type = (value != null) ? value.GetType() : typeof(Nullable <int>);

            ObjectContent content = new ObjectContent(type, value, formatter);

            var result = content.ReadAsStringAsync().Result;

            Assert.Xml.Equal(result, expected);
        }
Beispiel #6
0
        /// <summary>
        /// Sets the given <see cref="ODataMediaTypeFormatter"/> on the configuration and adds it to the formatter collection.
        /// </summary>
        /// <param name="configuration">Configuration to be updated.</param>
        /// <param name="formatter">The <see cref="ODataMediaTypeFormatter"/> to update.</param>
        public static void SetODataFormatter(this HttpConfiguration configuration, ODataMediaTypeFormatter formatter)
        {
            if (configuration == null)
            {
                throw Error.ArgumentNull("configuration");
            }

            if (formatter == null)
            {
                throw Error.ArgumentNull("formatter");
            }

            if (configuration.GetODataFormatter() != null || configuration.Formatters.OfType <ODataMediaTypeFormatter>().Any())
            {
                throw Error.NotSupported(SRResources.ResetODataFormatterNotSupported, typeof(ODataMediaTypeFormatter).Name, typeof(HttpConfiguration).Name);
            }
            else if (configuration.GetEdmModel() != null && configuration.GetEdmModel() != formatter.Model)
            {
                throw Error.NotSupported(
                          SRResources.EdmModelOnConfigurationMismatch,
                          typeof(IEdmModel).Name,
                          typeof(ODataMediaTypeFormatter).Name,
                          "SetODataFormatter");
            }
            else
            {
                // This is a workaround for Bug 464640 where the formatter tracer wraps on to the formatter and there is no
                // easy way to retrieve the ODataFormatter from configuration afterwards.
                configuration.SetEdmModel(formatter.Model);
                configuration.Properties.TryAdd(ODataFormatterKey, formatter);
                configuration.Formatters.Insert(0, formatter);
            }
        }
 private ODataMediaTypeFormatter CreateFormatter()
 {
     ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Entry }, GetSampleRequest());
     formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomXmlTypeEntry);
     return formatter;
 }
Beispiel #8
0
 public CollectionTest()
 {
     _formatter         = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Collection });
     _formatter.Request = GetSampleRequest();
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml);
 }
Beispiel #9
0
        static void Main(string[] args)
        {
            Console.WriteLine(typeof(int).BaseType.BaseType);

            HttpSelfHostServer server = null;

            try
            {
                // Set up server configuration
                HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration(_baseAddress);
                configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;

                // Generate a model
                IEdmModel model = GetEdmModel();

                // Create the OData formatter and give it the model
                ODataMediaTypeFormatter odataFormatter = new ODataMediaTypeFormatter(model);
                configuration.Formatters.Clear();
                configuration.SetODataFormatter(odataFormatter);

                // Metadata routes to support $metadata and code generation in the WCF Data Service client.
                configuration.Routes.MapHttpRoute(ODataRouteNames.Metadata, "$metadata", new { Controller = "ODataMetadata", Action = "GetMetadata" });
                configuration.Routes.MapHttpRoute(ODataRouteNames.ServiceDocument, "", new { Controller = "ODataMetadata", Action = "GetServiceDocument" });

                // Relationship routes (notice the parameters is {type}Id not id, this avoids colliding with GetById(id)).
                configuration.Routes.MapHttpRoute(ODataRouteNames.PropertyNavigation, "{controller}({parentId})/{navigationProperty}");

                // Route for manipulating links.
                //configuration.Routes.MapHttpRoute(ODataRouteNames.Link, "{controller}({id})/$links/Products");
                configuration.Routes.MapHttpRoute(ODataRouteNames.Link, "{controller}({id})/$links/{navigationProperty}");

                // Routes for urls both producing and handling urls like ~/Product(1), ~/Products() and ~/Products
                configuration.Routes.MapHttpRoute(ODataRouteNames.GetById, "{controller}({id})");
                configuration.Routes.MapHttpRoute(ODataRouteNames.DefaultWithParentheses, "{controller}()");
                configuration.Routes.MapHttpRoute(ODataRouteNames.Default, "{controller}");

                // Create server
                server = new HttpSelfHostServer(configuration);

                // Start listening
                server.OpenAsync().Wait();
                Console.WriteLine("Listening on " + _baseAddress);
            }
            catch (Exception e)
            {
                Console.WriteLine("Could not start server: {0}", e.GetBaseException().Message);
            }
            finally
            {
                Console.WriteLine("Hit ENTER to exit...");
                Console.ReadLine();

                if (server != null)
                {
                    // Stop listening
                    server.CloseAsync().Wait();
                }
            }
        }
Beispiel #10
0
        private ODataMediaTypeFormatter CreateFormatter()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Entry });

            formatter.Request = GetSampleRequest();
            formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
            return(formatter);
        }
Beispiel #11
0
 public ComplexTypeTest()
 {
     _formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Property })
     {
         Request = GetSampleRequest()
     };
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml);
 }
        public void ContentHeadersAreAddedForJsonMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel()) { Request = GetSampleRequest() };
            HttpContent content = new ObjectContent<Employee>(new Employee(0, new ReferenceDepthContext(7)), formatter, "application/json");
            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/json; odata=verbose; charset=utf-8");
        }
        public void EntityTypeSerializesAsODataEntry()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel()) { Request = GetSampleRequest() };
            Employee employee = (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee);
            ObjectContent<Employee> content = new ObjectContent<Employee>(employee, formatter);

            RegexReplacement replaceUpdateTime = new RegexReplacement("<updated>*.*</updated>", "<updated>UpdatedTime</updated>");
            Assert.Xml.Equal(BaselineResource.TestEntityTypeBasic, content.ReadAsStringAsync().Result, regexReplacements: replaceUpdateTime);
        }
Beispiel #14
0
        internal IEdmTypeReference GetEdmType(Type type)
        {
            if (ResourceEdmType != null)
            {
                return(ResourceEdmType);
            }

            return(ODataMediaTypeFormatter.GetExpectedPayloadType(type, Path, Model));
        }
        public void ContentHeadersAreAddedForXmlMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter();

            ObjectContent<Employee> content = new ObjectContent<Employee>(new Employee(0, new ReferenceDepthContext(7)), formatter);
            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/atom+xml; type=entry");
        }
        public void EntityTypeSerializesAsODataEntry()
        {
            ODataMediaTypeFormatter formatter = CreateFormatter();
            Employee employee = (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee);
            ObjectContent <Employee> content = new ObjectContent <Employee>(employee, formatter);

            RegexReplacement replaceUpdateTime = new RegexReplacement("<updated>*.*</updated>", "<updated>UpdatedTime</updated>");

            Assert.Xml.Equal(BaselineResource.TestEntityTypeBasic, content.ReadAsStringAsync().Result, regexReplacements: replaceUpdateTime);
        }
Beispiel #17
0
        public void ContentHeadersAreAddedForXmlMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel()) { Request = GetSampleRequest() };

            ObjectContent<IEnumerable<Employee>> content = new ObjectContent<IEnumerable<Employee>>(new Employee[] { new Employee(0, new ReferenceDepthContext(7)) }, formatter);
            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/atom+xml; type=feed; charset=utf-8");
        }
        internal static ODataMediaTypeFormatter GetInputFormatter(ODataPayloadKind[] payload, HttpRequestMessage request, string mediaType = null)
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Property })
            {
                Request = request
            };

            request.GetConfiguration().Routes.MapFakeODataRoute();
            return(formatter);
        }
Beispiel #19
0
        public void ContentHeadersAreAddedForJsonMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter();

            HttpContent content = new ObjectContent<IEnumerable<Employee>>(new Employee[] { new Employee(0, new ReferenceDepthContext(7)) }, formatter, "application/json");
            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Equal(content.Headers.ContentType.MediaType, "application/json");
        }
        public void EntityTypeWithMultipleKeysSerializesAsODataEntry()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter();

            MultipleKeyEmployee multipleKeyEmployee = (MultipleKeyEmployee)TypeInitializer.GetInstance(SupportedTypes.MultipleKeyEmployee);
            ObjectContent<MultipleKeyEmployee> content = new ObjectContent<MultipleKeyEmployee>(multipleKeyEmployee, formatter);

            RegexReplacement replaceUpdateTime = new RegexReplacement("<updated>*.*</updated>", "<updated>UpdatedTime</updated>");
            Assert.Xml.Equal(BaselineResource.TestEntityTypeWithMultipleKeys, content.ReadAsStringAsync().Result, regexReplacements: replaceUpdateTime);
        }
Beispiel #21
0
        private static ODataMediaTypeFormatter GetFormatter()
        {
            var formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Resource })
            {
                Request = GetSampleRequest()
            };

            formatter.SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse(ODataMediaTypes.ApplicationJsonODataMinimalMetadata));
            formatter.SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse(ODataMediaTypes.ApplicationXml));
            return(formatter);
        }
        public ComplexTypeTest()
        {
            ODataModelBuilder model = new ODataModelBuilder();
            var person = model.ComplexType<Person>();
            person.Property(p => p.Age);
            person.Property(p => p.FirstName);
            person.ComplexProperty(p => p.FavoriteHobby);
            person.ComplexProperty(p => p.Gender);

            _formatter = new ODataMediaTypeFormatter(model.GetEdmModel()) { IsClient = true };
        }
Beispiel #23
0
        public void ContentHeadersAreAddedForXmlMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter();

            ObjectContent <Employee> content = new ObjectContent <Employee>(new Employee(0, new ReferenceDepthContext(7)), formatter);

            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/atom+xml; type=entry");
        }
Beispiel #24
0
        public void ContentHeadersAreAddedForJsonMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter();

            HttpContent content = new ObjectContent <Employee>(new Employee(0, new ReferenceDepthContext(7)), formatter, "application/json");

            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Equal(content.Headers.ContentType.MediaType, "application/json");
        }
Beispiel #25
0
        public void EntityTypeSerializesAsODataEntry()
        {
            // Arrange
            ODataMediaTypeFormatter formatter = CreateFormatter();
            Employee employee = (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee);
            ObjectContent <Employee> content = new ObjectContent <Employee>(employee, formatter,
                                                                            ODataMediaTypes.ApplicationJsonODataMinimalMetadata);

            // Act & Assert
            JsonAssert.Equal(Resources.EmployeeEntry, content.ReadAsStringAsync().Result);
        }
Beispiel #26
0
        private static ODataMediaTypeFormatter GetFormatter()
        {
            var formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Property })
            {
                Request = GetSampleRequest()
            };

            formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
            formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml);
            return(formatter);
        }
        public void SetODataFormatter_AddsFormatterToTheFormatterCollection()
        {
            // Arrange
            HttpConfiguration       configuration = new HttpConfiguration();
            ODataMediaTypeFormatter formatter     = CreateODataFormatter();

            // Act
            configuration.Formatters.Insert(0, formatter);

            // Assert
            Assert.Contains(formatter, configuration.Formatters);
        }
Beispiel #28
0
        public ComplexTypeTest()
        {
            ODataModelBuilder model = new ODataModelBuilder();
            var person = model.ComplexType <Person>();

            person.Property(p => p.Age);
            person.Property(p => p.FirstName);
            person.ComplexProperty(p => p.FavoriteHobby);
            person.ComplexProperty(p => p.Gender);

            _formatter = new ODataMediaTypeFormatter(model.GetEdmModel());
        }
        internal static async Task <object> ReadAsync(ODataMediaTypeFormatter formatter, string entity, Type valueType, HttpRequestMessage request, string mediaType)
        {
            using (StringContent content = new StringContent(entity))
            {
                content.Headers.ContentType = MediaTypeHeaderValue.Parse(mediaType);

                using (Stream stream = await content.ReadAsStreamAsync())
                {
                    return(await formatter.ReadFromStreamAsync(valueType, stream, content,
                                                               new Mock <IFormatterLogger>().Object));
                }
            }
        }
Beispiel #30
0
        public void ContentHeadersAreAddedForJsonMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel())
            {
                Request = GetSampleRequest()
            };
            HttpContent content = new ObjectContent <Employee>(new Employee(0, new ReferenceDepthContext(7)), formatter, "application/json");

            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/json; odata=verbose; charset=utf-8");
        }
        public void GetODataFormatter_ReturnsNull_IfNotSet()
        {
            // Arrange
            HttpConfiguration       configuration = new HttpConfiguration();
            ODataMediaTypeFormatter formatter     = new Mock <ODataMediaTypeFormatter>().Object;

            configuration.Formatters.Add(formatter);

            // Act
            ODataMediaTypeFormatter result = configuration.GetODataFormatter();

            // Assert
            Assert.Null(result);
        }
        public void GetODataFormatter_Returns_SetODataFormatter()
        {
            // Arrange
            HttpConfiguration       configuration = new HttpConfiguration();
            ODataMediaTypeFormatter formatter     = new Mock <ODataMediaTypeFormatter>().Object;

            configuration.SetODataFormatter(formatter);

            // Act
            ODataMediaTypeFormatter result = configuration.GetODataFormatter();

            // Assert
            Assert.Equal(formatter, result);
        }
Beispiel #33
0
        public void ContentHeadersAreAddedForXmlMediaType()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel())
            {
                Request = GetSampleRequest()
            };

            ObjectContent <IEnumerable <Employee> > content = new ObjectContent <IEnumerable <Employee> >(new Employee[] { new Employee(0, new ReferenceDepthContext(7)) }, formatter);

            content.LoadIntoBufferAsync().Wait();

            Assert.Http.Contains(content.Headers, "DataServiceVersion", "3.0;");
            Assert.Http.Contains(content.Headers, "Content-Type", "application/atom+xml; type=feed; charset=utf-8");
        }
Beispiel #34
0
        public void IEnumerableOfEntityTypeSerializesAsODataFeed()
        {
            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(GetSampleModel()) { Request = GetSampleRequest() };

            IEnumerable<Employee> collectionOfPerson = new Collection<Employee>() 
            {
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 0),
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 1),
            };

            ObjectContent<IEnumerable<Employee>> content = new ObjectContent<IEnumerable<Employee>>(collectionOfPerson, formatter);

            RegexReplacement replaceUpdateTime = new RegexReplacement("<updated>*.*</updated>", "<updated>UpdatedTime</updated>");
            Assert.Xml.Equal(BaselineResource.TestFeedOfEmployee, content.ReadAsStringAsync().Result, regexReplacements: replaceUpdateTime);
        }
        public void DollarMetaData_Works_WithoutAcceptHeader()
        {
            HttpServer server = new HttpServer();
            ODataMediaTypeFormatter odataFormatter = new ODataMediaTypeFormatter(ODataTestUtil.GetEdmModel());

            server.Configuration.Formatters.Add(odataFormatter);
            server.Configuration.Routes.MapHttpRoute(ODataRouteNames.Metadata, "$metadata", new { Controller = "ODataMetadata", Action = "GetMetadata" });

            HttpClient client   = new HttpClient(server);
            var        response = client.GetAsync("http://localhost/$metadata").Result;

            Assert.True(response.IsSuccessStatusCode);
            Assert.Equal(response.Content.Headers.ContentType.MediaType, "application/xml");
            Assert.Contains("<edmx:Edmx", response.Content.ReadAsStringAsync().Result);
        }
Beispiel #36
0
        public InheritanceTests()
        {
            _configuration = new HttpConfiguration();
            _formatter     = new ODataMediaTypeFormatter(GetEdmModel());

            _configuration.Formatters.Clear();
            _configuration.Formatters.Add(_formatter);

            _configuration.Routes.MapHttpRoute("default", "{action}", new { Controller = "Inheritance" });

            _configuration.Routes.MapHttpRoute(ODataRouteNames.GetById, "{controller}({id})");
            _configuration.Routes.MapHttpRoute(ODataRouteNames.Default, "{controller}");

            _server = new HttpServer(_configuration);
            _client = new HttpClient(_server);
        }
        public void ServiceDocumentWorks_AfterTracingIsEnabled_IfModelIsSetOnConfiguration()
        {
            HttpServer server = new HttpServer();
            ODataMediaTypeFormatter odataFormatter = new ODataMediaTypeFormatter(ODataTestUtil.GetEdmModel());

            server.Configuration.Formatters.Insert(0, odataFormatter);
            server.Configuration.Routes.MapHttpRoute(ODataRouteNames.ServiceDocument, "", new { Controller = "ODataMetadata", Action = "GetServiceDocument" });
            server.Configuration.Services.Replace(typeof(ITraceWriter), new Mock <ITraceWriter>().Object);

            HttpClient client   = new HttpClient(server);
            var        response = client.GetAsync("http://localhost/").Result;

            Assert.True(response.IsSuccessStatusCode);
            Assert.Equal(response.Content.Headers.ContentType.MediaType, "application/xml");
            Assert.Contains("<workspace>", response.Content.ReadAsStringAsync().Result);
        }
Beispiel #38
0
        public void IEnumerableOfEntityTypeSerializesAsODataFeed()
        {
            ODataMediaTypeFormatter formatter = CreateFormatter();

            IEnumerable <Employee> collectionOfPerson = new Collection <Employee>()
            {
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 0),
                (Employee)TypeInitializer.GetInstance(SupportedTypes.Employee, 1),
            };

            ObjectContent <IEnumerable <Employee> > content = new ObjectContent <IEnumerable <Employee> >(collectionOfPerson, formatter);

            RegexReplacement replaceUpdateTime = new RegexReplacement("<updated>*.*</updated>", "<updated>UpdatedTime</updated>");

            Assert.Xml.Equal(BaselineResource.TestFeedOfEmployee, content.ReadAsStringAsync().Result, regexReplacements: replaceUpdateTime);
        }
        // This class requires and supports only OData formatter. So clear everything else.
        // This also helps the case where a request without accept header hitting the metadata endpoint. we want the metadata to be serialized in odata format.
        // if the accept header contains anything other than odata format, we should fail.
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            if (controllerSettings == null)
            {
                throw Error.ArgumentNull("controllerSettings");
            }

            ODataMediaTypeFormatter odataFormatter = controllerDescriptor.Configuration.GetODataFormatter();

            controllerSettings.Formatters.Clear();

            if (odataFormatter != null)
            {
                controllerSettings.Formatters.Add(odataFormatter);
            }
        }
Beispiel #40
0
        internal static MediaTypeFormatter GetODataFormatter(this HttpConfiguration configuration, out IEdmModel edmModel)
        {
            if (configuration == null)
            {
                throw Error.ArgumentNull("configuration");
            }

            foreach (MediaTypeFormatter formatter in configuration.Formatters)
            {
                ODataMediaTypeFormatter odataFormatter = formatter as ODataMediaTypeFormatter;
                if (odataFormatter != null)
                {
                    edmModel = odataFormatter.Model;
                    return(odataFormatter);
                }
            }

            // Detects ODataFormatters that are wrapped by tracing
            // Creates a dummy request message and sees if the formatter adds a model to the request properties
            // This is a workaround until tracing provides information about the wrapped inner formatter
            foreach (MediaTypeFormatter formatter in configuration.Formatters)
            {
                using (HttpRequestMessage request = new HttpRequestMessage())
                {
                    try
                    {
                        formatter.GetPerRequestFormatterInstance(typeof(IEdmModel), request, mediaType: null);
                        object model;
                        if (request.Properties.TryGetValue(ODataMediaTypeFormatter.EdmModelKey, out model))
                        {
                            edmModel = model as IEdmModel;
                            if (edmModel != null)
                            {
                                return(formatter);
                            }
                        }
                    }
                    catch
                    {
                        // Ignore exceptions - it isn't the OData formatter we're looking for
                    }
                }
            }

            edmModel = null;
            return(null);
        }
        public void Initialize_DoesNotChangeFormatters_IfODataFormatterAlreadyRegistered()
        {
            var config         = new HttpConfiguration();
            var odataFormatter = new ODataMediaTypeFormatter(Enumerable.Empty <ODataPayloadKind>());

            config.Formatters.Add(odataFormatter);
            int formatterCount       = config.Formatters.Count;
            var controllerSettings   = new HttpControllerSettings(config);
            var controllerDescriptor = new HttpControllerDescriptor();

            controllerDescriptor.Configuration = config;

            new ODataFormattingAttribute().Initialize(controllerSettings, controllerDescriptor);

            Assert.Same(odataFormatter, controllerSettings.Formatters.OfType <ODataMediaTypeFormatter>().First());
            Assert.Equal(formatterCount, controllerSettings.Formatters.Count);
        }
        public static void Initialize()
        {
            var routes = RouteTable.Routes;

            var config = new ApiConfiguration(Bootstrapper.CompositionRoot)
            {
                EnableTestClient = true
            };

            var odataFormatter = new ODataMediaTypeFormatter();
            odataFormatter.SupportedMediaTypes.Clear();
            odataFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/atom+xml"));

            config.Formatters.Clear();
            config.Formatters.Insert(0, odataFormatter);
            routes.SetDefaultHttpConfiguration(config);

            routes.MapServiceRoute<ProjectsApi>("api/projects");
        }
        public void PrimitiveTypesSerializeAsOData(string typeString, object value)
        {
            string expected = BaselineResource.ResourceManager.GetString(typeString);
            Assert.NotNull(expected);

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

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

            ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(model.GetEdmModel()) { Request = request };

            Type type = (value != null) ? value.GetType() : typeof(Nullable<int>);

            ObjectContent content = new ObjectContent(type, value, formatter);

            var result = content.ReadAsStringAsync().Result;
            Assert.Xml.Equal(result, expected);
        }
 public ComplexTypeTest()
 {
     _formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Property }, GetSampleRequest());
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata);
     _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml);
 }
 public CollectionTest()
 {
     _formatter = new ODataMediaTypeFormatter(GetSampleModel(),
         new ODataPayloadKind[] { ODataPayloadKind.Collection }, GetSampleRequest());
 }
 public ComplexTypeTest()
 {
     _formatter = new ODataMediaTypeFormatter(GetSampleModel(),
         new ODataPayloadKind[] { ODataPayloadKind.Property }, GetSampleRequest());
 }