public CollectionTest() { _formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Collection }); _formatter.Request = GetSampleRequest(); _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata); _formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml); }
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)); }
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); } }
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); }
/// <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; }
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(); } } }
private ODataMediaTypeFormatter CreateFormatter() { ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(new ODataPayloadKind[] { ODataPayloadKind.Entry }); formatter.Request = GetSampleRequest(); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata); return(formatter); }
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); }
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); }
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); }
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); }
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 }; }
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 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"); }
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); }
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); }
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)); } } }
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); }
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"); }
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); }
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); }
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); } }
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()); }