public RequestVersionProvider(IEnumerable <IRequestVersionParser> versionParsers, IOptions <ApiActionConfiguration> configurationAccessor, IVersionEdgeProvider versionEdgeProvider, IApiActionRegistrationProvider apiActionRegistrationProvider) { if (versionParsers == null) { throw new ArgumentNullException(nameof(versionParsers)); } if (configurationAccessor == null) { throw new ArgumentNullException(nameof(configurationAccessor)); } if (versionEdgeProvider == null) { throw new ArgumentNullException(nameof(versionEdgeProvider)); } if (apiActionRegistrationProvider == null) { throw new ArgumentNullException(nameof(apiActionRegistrationProvider)); } _versionParsers = versionParsers.ToArray(); if (!ApiActionVersion.TryParse(configurationAccessor.Value.DefaultRequestVersion, out _defaultVersion)) { _defaultVersion = versionEdgeProvider .GetVersionEdges(apiActionRegistrationProvider.Registrations .Select(r => r.ApiActionType).ToList()).OrderByDescending(v => v) .FirstOrDefault() ?? new ApiActionVersion(1, 0); } }
public void InEqualComparisons(string smaller, string larger) { Assert.IsTrue(ApiActionVersion.TryParse(smaller, out var smallerVersion)); Assert.IsTrue(ApiActionVersion.TryParse(larger, out var largerVersion)); Assert.IsFalse(smallerVersion == largerVersion); Assert.IsFalse(smallerVersion.Equals(largerVersion)); Assert.IsTrue(smallerVersion != largerVersion); Assert.AreNotEqual(smallerVersion.GetHashCode(), largerVersion.GetHashCode()); Assert.IsTrue(smallerVersion < largerVersion); Assert.IsTrue(smallerVersion <= largerVersion); Assert.IsTrue(smallerVersion.CompareTo(largerVersion) < 0); Assert.IsTrue(largerVersion > smallerVersion); Assert.IsTrue(largerVersion >= smallerVersion); Assert.IsTrue(largerVersion.CompareTo(smallerVersion) > 0); Assert.AreNotEqual(largerVersion.ToString(), smallerVersion.ToString()); }
public ApiActionVersion Get(HttpContext context, IDictionary <string, object> routeValues) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (routeValues == null) { throw new ArgumentNullException(nameof(routeValues)); } context.Items.TryGetValue(RequestCacheKey, out var requestCachedVersion); var version = requestCachedVersion as ApiActionVersion; if (version == null) { foreach (var versionParser in _versionParsers) { var versionString = versionParser.Parse(context, routeValues); if (versionString != null && ApiActionVersion.TryParse(versionString, out version)) { break; } } if (version == null) { // If version not found, use configuration provided value, then default version = _defaultVersion; } context.Items[RequestCacheKey] = version; } return(version); }
public void TryParseInvalidVersion(string value) { Assert.IsFalse(ApiActionVersion.TryParse(value, out var output)); Assert.IsNull(output); }