public override async Task StartBatchAsync()
 {
     _requestMessage = new ODataRequestMessage() { Url = _session.Settings.BaseUri };
     _messageWriter = new ODataMessageWriter(_requestMessage);
     _batchWriter = await _messageWriter.CreateODataBatchWriterAsync();
     await _batchWriter.WriteStartBatchAsync();
     this.HasOperations = true;
 }
Пример #2
0
 /// <summary>
 /// Reads the OData-Version header from the <paramref name="message"/> and parses it.
 /// If no OData-Version header is found it sets the default version to be used for reading.
 /// </summary>
 /// <param name="message">The message to get the OData-Version version header from.</param>
 /// <param name="defaultVersion">The default version to use if the header was not specified.</param>
 /// <returns>
 /// The <see cref="ODataVersion"/> retrieved from the OData-Version header of the message.
 /// The default version if none is specified in the header.
 /// </returns>
 public static ODataVersion GetODataVersion(this IODataRequestMessage message, ODataVersion defaultVersion)
 {
     // translation from IODataResponseMessage to ODataMessage to pass into GetODataVersion.
     // we retain all of the data we need from the message, with a few extra data that aren't used in.
     // GetODataVersion. Not ideal, but it works.
     ODataMessage odataMessage = new ODataRequestMessage(message, false /*writing*/, false/*disableMessageStreamDisposal*/, Int64.MaxValue /*maxMessageSize*/);
     return ODataUtilsInternal.GetODataVersion(odataMessage, defaultVersion);
 }
        public void GetDataServiceVersionWorksForRequest()
        {
            InMemoryMessage simulatedRequestMessage = new InMemoryMessage();
            simulatedRequestMessage.SetHeader(ODataConstants.ODataVersionHeader, "4.0");

            IODataRequestMessage request = new ODataRequestMessage(simulatedRequestMessage, false, false, long.MaxValue);
            ODataVersion version = request.GetODataVersion(ODataVersion.V4);
            version.Should().Be(ODataUtils.StringToODataVersion(request.GetHeader(ODataConstants.ODataVersionHeader)));
        }
 protected override async Task<Stream> WriteLinkContentAsync(string linkIdent)
 {
     var message = new ODataRequestMessage();
     using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model))
     {
         var link = new ODataEntityReferenceLink { Url = Utils.CreateAbsoluteUri(_session.Settings.BaseUri.AbsoluteUri, linkIdent) };
         await messageWriter.WriteEntityReferenceLinkAsync(link);
         return await message.GetStreamAsync();
     }
 }
Пример #5
0
        public void GetDataServiceVersionWorksForRequest()
        {
            InMemoryMessage simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(ODataConstants.ODataVersionHeader, "4.0");

            IODataRequestMessage request = new ODataRequestMessage(simulatedRequestMessage, false, false, long.MaxValue);
            ODataVersion         version = request.GetODataVersion(ODataVersion.V4);

            Assert.Equal(ODataUtils.StringToODataVersion(request.GetHeader(ODataConstants.ODataVersionHeader)), version);
        }
        public void GetHeaderGoesToInnerMessageAfterConstruction()
        {
            const string headerName = "CustomHeaderName";
            const string headerValue = "CustomerHeaderValue";

            var simulatedRequestMessage = new InMemoryMessage();
            simulatedRequestMessage.SetHeader(headerName, headerValue);
            
            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);

            odataRequestMessage.GetHeader(headerName).Should().Be(headerValue);
        }
        public void SetHeaderIsNotAllowedWhenReading()
        {
            const string headerName = "CustomHeaderName";
            const string headerValueBefore = "CustomerHeaderValueBefore";
            const string headerValueAfter = "CustomerHeaderValueAfter";

            var simulatedRequestMessage = new InMemoryMessage(); 
            simulatedRequestMessage.SetHeader(headerName, headerValueBefore);
            
            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);
            Action setHeader = (() => odataRequestMessage.SetHeader(headerName, headerValueAfter));
            setHeader.ShouldThrow<ODataException>().WithMessage(Strings.ODataMessage_MustNotModifyMessage);
        }
Пример #8
0
    public async override Task StartBatchAsync()
    {
        _requestMessage = new ODataRequestMessage()
        {
            Url = _session.Settings.BaseUri
        };
        _messageWriter = new ODataMessageWriter(_requestMessage);
        _batchWriter   = await _messageWriter.CreateODataBatchWriterAsync().ConfigureAwait(false);

        await _batchWriter.WriteStartBatchAsync().ConfigureAwait(false);

        HasOperations = true;
    }
        public void GetAcceptHeaderWithInnerValueGetsInnerValue()
        {
            const string headerName  = "Accept";
            const string headerValue = "json-rox";

            var simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(headerName, headerValue);

            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);

            odataRequestMessage.GetHeader(headerName).Should().Be(headerValue);
        }
Пример #10
0
        public void GetHeaderGoesToInnerMessageAfterConstruction()
        {
            const string headerName  = "CustomHeaderName";
            const string headerValue = "CustomerHeaderValue";

            var simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(headerName, headerValue);

            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);

            odataRequestMessage.GetHeader(headerName).Should().Be(headerValue);
        }
Пример #11
0
    protected async override Task <Stream> WriteStreamContentAsync(Stream stream, bool writeAsText)
    {
        var message = new ODataRequestMessage();

        using var messageWriter = new ODataMessageWriter(message, GetWriterSettings(ODataFormat.RawValue), _model);
        var value = writeAsText ? (object)Utils.StreamToString(stream) : Utils.StreamToByteArray(stream);
        await messageWriter
        .WriteValueAsync(value)
        .ConfigureAwait(false);

        return(await message
               .GetStreamAsync()
               .ConfigureAwait(false));
    }
        public void GetHeaderOnInnerMessagePicksUpSetHeaderFromOuterCallOnWriting()
        {
            const string headerName = "CustomHeaderName";
            const string headerValueBefore = "CustomerHeaderValueBefore";
            const string headerValueAfter = "CustomerHeaderValueAfter";

            var simulatedRequestMessage = new InMemoryMessage { Method = "GET", Url = new Uri("http://example.com/Customers") }; 
            simulatedRequestMessage.SetHeader(headerName, headerValueBefore);
            
            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, true, false, -1);
            odataRequestMessage.SetHeader(headerName, headerValueAfter);

            simulatedRequestMessage.GetHeader(headerName).Should().Be(headerValueAfter);
        }
Пример #13
0
        public void SetHeaderIsNotAllowedWhenReading()
        {
            const string headerName        = "CustomHeaderName";
            const string headerValueBefore = "CustomerHeaderValueBefore";
            const string headerValueAfter  = "CustomerHeaderValueAfter";

            var simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(headerName, headerValueBefore);

            var    odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);
            Action setHeader           = (() => odataRequestMessage.SetHeader(headerName, headerValueAfter));

            setHeader.ShouldThrow <ODataException>().WithMessage(Strings.ODataMessage_MustNotModifyMessage);
        }
        public void GetHeaderGoesToInnerMessageAfterLaterInnerSetHeaderCall()
        {
            const string headerName        = "CustomHeaderName";
            const string headerValueBefore = "CustomerHeaderValueBefore";
            const string headerValueAfter  = "CustomerHeaderValueAfter";

            var simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(headerName, headerValueBefore);

            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);

            simulatedRequestMessage.SetHeader(headerName, headerValueAfter);

            Assert.Equal(headerValueAfter, odataRequestMessage.GetHeader(headerName));
        }
Пример #15
0
        public void GetHeaderOnInnerMessagePicksUpSetHeaderFromOuterCallOnWriting()
        {
            const string headerName        = "CustomHeaderName";
            const string headerValueBefore = "CustomerHeaderValueBefore";
            const string headerValueAfter  = "CustomerHeaderValueAfter";

            var simulatedRequestMessage = new InMemoryMessage {
                Method = "GET", Url = new Uri("http://example.com/Customers")
            };

            simulatedRequestMessage.SetHeader(headerName, headerValueBefore);

            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, true, false, -1);

            odataRequestMessage.SetHeader(headerName, headerValueAfter);

            simulatedRequestMessage.GetHeader(headerName).Should().Be(headerValueAfter);
        }
        protected override async Task<Stream> WriteActionContentAsync(string actionName, IDictionary<string, object> parameters)
        {
            var message = new ODataRequestMessage();
            using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model))
            {
                var action = _model.SchemaElements.BestMatch(
                    x => x.SchemaElementKind == EdmSchemaElementKind.Action,
                    x => x.Name, actionName, _session.Pluralizer) as IEdmAction;
                var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action);

                await parameterWriter.WriteStartAsync();

                foreach (var parameter in parameters)
                {
                    var actionParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer);
                    if (actionParameter == null)
                        throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName));

                    if (actionParameter.Type.Definition.TypeKind == EdmTypeKind.Collection)
                    {
                        var collectionType = actionParameter.Type.Definition as IEdmCollectionType;
                        var elementType = collectionType.ElementType;
                        if (elementType.Definition.TypeKind == EdmTypeKind.Entity)
                        {
                            var feedWriter = await parameterWriter.CreateFeedWriterAsync(parameter.Key);
                            var feed = new ODataFeed();
                            await feedWriter.WriteStartAsync(feed);
                            foreach (var item in parameter.Value as IEnumerable)
                            {
                                var entry = CreateODataEntry(elementType.Definition.FullTypeName(), item.ToDictionary());

                                await feedWriter.WriteStartAsync(entry);
                                await feedWriter.WriteEndAsync();
                            }
                            await feedWriter.WriteEndAsync();
                        }
                        else
                        {
                            var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key);
                            await collectionWriter.WriteStartAsync(new ODataCollectionStart());
                            foreach (var item in parameter.Value as IEnumerable)
                            {
                                await collectionWriter.WriteItemAsync(item);
                            }
                            await collectionWriter.WriteEndAsync();
                        }
                    }
                    else
                    {
                        await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value);
                    }
                }

                await parameterWriter.WriteEndAsync();
                return await message.GetStreamAsync();
            }
        }
        public void GetAcceptHeaderWithInnerValueGetsInnerValue()
        {
            const string headerName = "Accept";
            const string headerValue = "json-rox";

            var simulatedRequestMessage = new InMemoryMessage();
            simulatedRequestMessage.SetHeader(headerName, headerValue);

            var odataRequestMessage = new ODataRequestMessage(simulatedRequestMessage, false, false, -1);

            odataRequestMessage.GetHeader(headerName).Should().Be(headerValue);
        }
 protected override async Task<Stream> WriteStreamContentAsync(Stream stream)
 {
     var message = new ODataRequestMessage();
     using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(true), _model))
     {
         var v = Utils.StreamToString(stream);
         await messageWriter.WriteValueAsync(v);
         return await message.GetStreamAsync();
     }
 }
 protected override async Task<Stream> WriteStreamContentAsync(Stream stream, bool writeAsText)
 {
     var message = new ODataRequestMessage();
     using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(true), _model))
     {
         var value = writeAsText ? (object)Utils.StreamToString(stream) : Utils.StreamToByteArray(stream);
         await messageWriter.WriteValueAsync(value);
         return await message.GetStreamAsync();
     }
 }
        protected override async Task<Stream> WriteActionContentAsync(string actionName, IDictionary<string, object> parameters)
        {
            var message = new ODataRequestMessage();
            using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model))
            {
                var action = _model.SchemaElements.BestMatch(
                    x => x.SchemaElementKind == EdmSchemaElementKind.Action, 
                    x => x.Name, actionName, _session.Pluralizer);
                var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action as IEdmAction);

                await parameterWriter.WriteStartAsync();

                foreach (var parameter in parameters)
                {
                    if (!(parameter.Value is string) && parameter.Value is IEnumerable)
                    {
                        var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key);
                        await collectionWriter.WriteStartAsync(new ODataCollectionStart());
                        foreach (var item in parameter.Value as IEnumerable)
                        {
                            await collectionWriter.WriteItemAsync(item);
                        }
                        await collectionWriter.WriteEndAsync();
                    }
                    else
                    {
                        await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value);
                    }
                }

                await parameterWriter.WriteEndAsync();
                return await message.GetStreamAsync();
            }
        }