public async Task VerifyCanSendRequestPayloadAsyncTest() { var request = new ClientHttpRequestMessage(new Uri(TestDemoService.ServiceBaseUri, "Products")); request.Method = ODataConstants.MethodPost; using (ODataMessageWriter messageWriter = new ODataMessageWriter( request, new ODataMessageWriterSettings(), TestUtils.GetServiceModel(TestDemoService.ServiceBaseUri))) { ODataWriter writer = await messageWriter.CreateODataEntryWriterAsync(); await writer.WriteStartAsync(new ODataEntry() { TypeName = "DataServiceProviderDemo.Product", Properties = new ODataProperty[] { new ODataProperty { Name = "ID", Value = 42 } } }); await writer.WriteEndAsync(); await writer.FlushAsync(); } var response = await request.GetResponseAsync(); Assert.AreEqual(201, response.StatusCode); }
protected override async Task <Stream> WriteEntryContentAsync(string method, string collection, string commandText, IDictionary <string, object> entryData) { IODataRequestMessageAsync message = IsBatch ? await CreateOperationRequestMessageAsync(method, collection, entryData, commandText) : new ODataRequestMessage(); var entityType = _model.FindDeclaredType( _session.Metadata.GetEntityCollectionQualifiedTypeName(collection)) as IEdmEntityType; var model = method == RestVerbs.Patch ? new EdmDeltaModel(_model, entityType, entryData.Keys) : _model; using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), model)) { if (method == RestVerbs.Get || method == RestVerbs.Delete) { return(null); } var contentId = _deferredBatchWriter != null?_deferredBatchWriter.Value.GetContentId(entryData) : null; var entityCollection = _session.Metadata.GetEntityCollection(collection); var entryDetails = _session.Metadata.ParseEntryDetails(entityCollection.Name, entryData, contentId); var entryWriter = await messageWriter.CreateODataEntryWriterAsync(); var entry = new Microsoft.OData.Core.ODataEntry(); entry.TypeName = entityType.FullName(); var typeProperties = (_model.FindDeclaredType(entry.TypeName) as IEdmEntityType).Properties(); entry.Properties = entryDetails.Properties.Select(x => new ODataProperty() { Name = typeProperties.BestMatch(y => y.Name, x.Key, _session.Pluralizer).Name, Value = GetPropertyValue(typeProperties, x.Key, x.Value) }).ToList(); await entryWriter.WriteStartAsync(entry); if (entryDetails.Links != null) { foreach (var link in entryDetails.Links) { if (link.Value.Any(x => x.LinkData != null)) { await WriteLinkAsync(entryWriter, entry, link.Key, link.Value); } } } await entryWriter.WriteEndAsync(); return(IsBatch ? null : await message.GetStreamAsync()); } }
protected override async Task<Stream> WriteEntryContentAsync(string method, string collection, string commandText, IDictionary<string, object> entryData) { IODataRequestMessageAsync message = IsBatch ? await CreateOperationRequestMessageAsync(method, collection, entryData, commandText) : new ODataRequestMessage(); if (method == RestVerbs.Get || method == RestVerbs.Delete) return null; var entityType = _model.FindDeclaredType( _session.Metadata.GetEntityCollectionQualifiedTypeName(collection)) as IEdmEntityType; var model = method == RestVerbs.Patch ? new EdmDeltaModel(_model, entityType, entryData.Keys) : _model; using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), model)) { var contentId = _deferredBatchWriter != null ? _deferredBatchWriter.Value.GetContentId(entryData, null) : null; var entityCollection = _session.Metadata.GetEntityCollection(collection); var entryDetails = _session.Metadata.ParseEntryDetails(entityCollection.Name, entryData, contentId); var entryWriter = await messageWriter.CreateODataEntryWriterAsync(); var entry = new Microsoft.OData.Core.ODataEntry(); entry.TypeName = entityType.FullName(); var typeProperties = (_model.FindDeclaredType(entry.TypeName) as IEdmEntityType).Properties(); Func<string, string> findMatchingPropertyName = name => { var property = typeProperties.BestMatch(y => y.Name, name, _session.Pluralizer); return property != null ? property.Name : name; }; entry.Properties = entryDetails.Properties.Select(x => new ODataProperty() { Name = findMatchingPropertyName(x.Key), Value = GetPropertyValue(typeProperties, x.Key, x.Value) }).ToList(); await entryWriter.WriteStartAsync(entry); if (entryDetails.Links != null) { foreach (var link in entryDetails.Links) { if (link.Value.Any(x => x.LinkData != null)) { await WriteLinkAsync(entryWriter, entry, link.Key, link.Value); } } } await entryWriter.WriteEndAsync(); return IsBatch ? null : await message.GetStreamAsync(); } }
protected override async Task <Stream> WriteEntryContentAsync(string method, string collection, string commandText, IDictionary <string, object> entryData, bool resultRequired) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, collection, entryData, commandText, resultRequired).ConfigureAwait(false) : new ODataRequestMessage(); if (method == RestVerbs.Get || method == RestVerbs.Delete) { return(null); } var entityType = _model.FindDeclaredType( _session.Metadata.GetQualifiedTypeName(collection)) as IEdmEntityType; var model = (method == RestVerbs.Patch || method == RestVerbs.Merge) ? new EdmDeltaModel(_model, entityType, entryData.Keys) : _model; using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), model)) { var contentId = _deferredBatchWriter != null?_deferredBatchWriter.Value.GetContentId(entryData, null) : null; //var entityCollection = _session.Metadata.GetEntityCollection(collection); var entityCollection = _session.Metadata.NavigateToCollection(collection); var entryDetails = _session.Metadata.ParseEntryDetails(entityCollection.Name, entryData, contentId); var entryWriter = await messageWriter.CreateODataEntryWriterAsync().ConfigureAwait(false); var entry = CreateODataEntry(entityType.FullName(), entryDetails.Properties); await entryWriter.WriteStartAsync(entry).ConfigureAwait(false); if (entryDetails.Links != null) { foreach (var link in entryDetails.Links) { if (link.Value.Any(x => x.LinkData != null)) { await WriteLinkAsync(entryWriter, entry, link.Key, link.Value).ConfigureAwait(false); } } } await entryWriter.WriteEndAsync().ConfigureAwait(false); return(IsBatch ? null : await message.GetStreamAsync().ConfigureAwait(false)); } }
protected override async Task<Stream> WriteEntryContentAsync(string method, string collection, string commandText, IDictionary<string, object> entryData, bool resultRequired) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, collection, entryData, commandText, resultRequired) : new ODataRequestMessage(); if (method == RestVerbs.Get || method == RestVerbs.Delete) return null; var entityType = _model.FindDeclaredType( _session.Metadata.GetQualifiedTypeName(collection)) as IEdmEntityType; var model = method == RestVerbs.Patch ? new EdmDeltaModel(_model, entityType, entryData.Keys) : _model; using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), model)) { var contentId = _deferredBatchWriter != null ? _deferredBatchWriter.Value.GetContentId(entryData, null) : null; //var entityCollection = _session.Metadata.GetEntityCollection(collection); var entityCollection = _session.Metadata.NavigateToCollection(collection); var entryDetails = _session.Metadata.ParseEntryDetails(entityCollection.Name, entryData, contentId); var entryWriter = await messageWriter.CreateODataEntryWriterAsync(); var entry = CreateODataEntry(entityType.FullName(), entryDetails.Properties); await entryWriter.WriteStartAsync(entry); if (entryDetails.Links != null) { foreach (var link in entryDetails.Links) { if (link.Value.Any(x => x.LinkData != null)) { await WriteLinkAsync(entryWriter, entry, link.Key, link.Value); } } } await entryWriter.WriteEndAsync(); return IsBatch ? null : await message.GetStreamAsync(); } }