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; }
/// <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(); } }
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); }
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); }
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); }
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)); }
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(); } }
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(); } }