/// <summary> /// Reads the DataServiceVersion header from the <paramref name="message"/> and parses it. /// If no DataServiceVersion header is found it sets the default version to be used for reading. /// </summary> /// <param name="message">The message to get the data service 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 DataServiceVersion header of the message. /// The default version if none is specified in the header. /// </returns> public static ODataVersion GetDataServiceVersion(this IODataRequestMessage message, ODataVersion defaultVersion) { // translation from IODataResponseMessage to ODataMessage to pass into GetDataServiceVersion. // we retain all of the data we need from the message, with a few extra data that aren't used in. // GetDataServiceVersion. Not ideal, but it works. ODataMessage odataMessage = new ODataRequestMessage(message, false /*writing*/, false /*disableMessageStreamDisposal*/, Int64.MaxValue /*maxMessageSize*/); return(ODataUtilsInternal.GetDataServiceVersion(odataMessage, defaultVersion)); }
public ODataMessageReader(IODataResponseMessage responseMessage, ODataMessageReaderSettings settings, IEdmModel model) { this.readerPayloadKind = ODataPayloadKind.Unsupported; ExceptionUtils.CheckArgumentNotNull <IODataResponseMessage>(responseMessage, "responseMessage"); this.settings = (settings == null) ? new ODataMessageReaderSettings() : new ODataMessageReaderSettings(settings); ReaderValidationUtils.ValidateMessageReaderSettings(this.settings, true); this.readingResponse = true; this.message = new ODataResponseMessage(responseMessage, false, this.settings.DisableMessageStreamDisposal, this.settings.MessageQuotas.MaxReceivedMessageSize); this.urlResolver = responseMessage as IODataUrlResolver; this.version = ODataUtilsInternal.GetDataServiceVersion(this.message, this.settings.MaxProtocolVersion); this.model = model ?? EdmCoreModel.Instance; ODataVersionChecker.CheckVersionSupported(this.version, this.settings); }
private void EnsureODataVersion() { if (!this.settings.Version.HasValue) { this.settings.Version = new ODataVersion?(ODataUtilsInternal.GetDataServiceVersion(this.message, ODataVersion.V3)); } else { ODataUtilsInternal.SetDataServiceVersion(this.message, this.settings); } if ((((ODataVersion)this.settings.Version) >= ODataVersion.V3) && (this.settings.WriterBehavior.FormatBehaviorKind != ODataBehaviorKind.Default)) { this.settings.WriterBehavior.UseDefaultFormatBehavior(); } }
private bool TryGetSinglePayloadKindResultFromContentType(out IEnumerable <ODataPayloadKindDetectionResult> payloadKindResults, out MediaType contentType) { if (this.message.UseBufferingReadStream == true) { throw new ODataException(Microsoft.Data.OData.Strings.ODataMessageReader_DetectPayloadKindMultipleTimes); } IList <ODataPayloadKindDetectionResult> list = MediaTypeUtils.GetPayloadKindsForContentType(this.GetContentTypeHeader(), this.MediaTypeResolver, out contentType); payloadKindResults = from r in list where ODataUtilsInternal.IsPayloadKindSupported(r.PayloadKind, !this.readingResponse) select r; if (payloadKindResults.Count <ODataPayloadKindDetectionResult>() > 1) { this.message.UseBufferingReadStream = true; return(false); } return(true); }