/// <summary> /// Calculates the version based on the ODataUri provided /// </summary> /// <param name="request">Request to calculate from</param> /// <param name="maxProtocolVersion">Max Protocol version of the server</param> /// <returns>Data Service Protocol Version</returns> public DataServiceProtocolVersion CalculateMinResponseVersion(ODataRequest request, DataServiceProtocolVersion maxProtocolVersion) { ExceptionUtilities.CheckArgumentNotNull(request, "request"); ExceptionUtilities.Assert(maxProtocolVersion != DataServiceProtocolVersion.Unspecified, "Max protocol version cannot be unspecified when calculating the MinVersion"); string contentType = request.GetHeaderValueIfExists(HttpHeaders.Accept); DataServiceProtocolVersion maxDataServiceVersion = VersionHelper.ConvertToDataServiceProtocolVersion(request.GetHeaderValueIfExists(HttpHeaders.MaxDataServiceVersion)); HttpVerb effectiveVerb = request.GetEffectiveVerb(); if (contentType == null) { contentType = MimeTypes.Any; } if (effectiveVerb == HttpVerb.Post || effectiveVerb.IsUpdateVerb()) { DataServiceProtocolVersion version = DataServiceProtocolVersion.V4; string preferHeaderValue = request.GetHeaderValueIfExists(HttpHeaders.Prefer); // Bump to Version 3 if prefer header is specified and its > V3 server if (preferHeaderValue != null && request.PreferHeaderApplies(maxProtocolVersion)) { version = version.IncreaseVersionIfRequired(DataServiceProtocolVersion.V4); } // for insert or update, versioning is specific to the type EntityType expectedEntityType; if (TryGetExpectedType(request, out expectedEntityType)) { version = VersionHelper.IncreaseVersionIfRequired(version, VersionHelper.CalculateProtocolVersion(expectedEntityType, contentType, VersionCalculationType.Response, maxProtocolVersion, maxDataServiceVersion)); } return(version); } return(VersionHelper.CalculateUriResponseMinProtocolVersion(request.Uri, contentType, maxProtocolVersion, maxDataServiceVersion)); }