コード例 #1
0
        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);
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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));
            }
        }
コード例 #5
0
        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();
            }
        }