internal static string ResolveUriTemplate(string uriTemplate, QueryStringCollection queryStringCollection) { var createdUriPath = uriTemplate; MatchCollection matchedParamNames = _uriParamRegex.Matches(uriTemplate); int matchedParamNameAmount = matchedParamNames.Count; if (matchedParamNameAmount != 0) { // TODO: Regex match operration + this operation's result can be cached. // Build a key from the base address and the uriTemplate and look that up. // Get the match values under an array. string[] matchedParameterNameArray = new string[matchedParamNameAmount]; for (int i = 0; i < matchedParamNameAmount; i++) { matchedParameterNameArray[i] = matchedParamNames[i].Value; } // Check here that enough number of parameters are available. // We assume here that we have the queryStringCollection.Count and id parameter if queryStringCollection is not null if (((queryStringCollection != null) ? queryStringCollection.Count : 0) < matchedParamNameAmount) { throw new InvalidOperationException(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage); } foreach (var paramName in matchedParameterNameArray) { string paramValueFromQueryStringCollection = null; if (queryStringCollection == null) { throw new InvalidOperationException( string.Format(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage, paramName)); } else { var paramFromQueryStringCollection = queryStringCollection.FirstOrDefault(x => x.Key.Equals(paramName, StringComparison.InvariantCultureIgnoreCase)); paramValueFromQueryStringCollection = paramFromQueryStringCollection.Value; if (paramValueFromQueryStringCollection == null) { throw new InvalidOperationException( string.Format(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage, paramName)); } // Remove the selected one because it will be // used for querystring composition. queryStringCollection.Remove(paramFromQueryStringCollection); } string paramValue = paramValueFromQueryStringCollection; createdUriPath = createdUriPath.Replace("{" + paramName + "}", paramValue); } } return(((queryStringCollection != null) && queryStringCollection.Count > 0) ? string.Format("{0}?{1}", createdUriPath, queryStringCollection.ToString().ToLowerInvariant()) : createdUriPath); }
internal static string ResolveUriTemplate(string uriTemplate, QueryStringCollection queryStringCollection) { var createdUriPath = uriTemplate; MatchCollection matchedParamNames = _uriParamRegex.Matches(uriTemplate); int matchedParamNameAmount = matchedParamNames.Count; if (matchedParamNameAmount != 0) { // TODO: Regex match operration + this operation's result can be cached. // Build a key from the base address and the uriTemplate and look that up. // Get the match values under an array. string[] matchedParameterNameArray = new string[matchedParamNameAmount]; for (int i = 0; i < matchedParamNameAmount; i++) { matchedParameterNameArray[i] = matchedParamNames[i].Value; } // Check here that enough number of parameters are available. // We assume here that we have the queryStringCollection.Count and id parameter if queryStringCollection is not null if (((queryStringCollection != null) ? queryStringCollection.Count : 0) < matchedParamNameAmount) { throw new InvalidOperationException(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage); } foreach (var paramName in matchedParameterNameArray) { string paramValueFromQueryStringCollection = null; if (queryStringCollection == null) { throw new InvalidOperationException( string.Format(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage, paramName)); } else { var paramFromQueryStringCollection = queryStringCollection.FirstOrDefault(x => x.Key.Equals(paramName, StringComparison.InvariantCultureIgnoreCase)); paramValueFromQueryStringCollection = paramFromQueryStringCollection.Value; if (paramValueFromQueryStringCollection == null) { throw new InvalidOperationException( string.Format(InternalResource.ResolveUriTemplate_PassedParamaterValueAmountErrorMessage, paramName)); } // Remove the selected one because it will be // used for querystring composition. queryStringCollection.Remove(paramFromQueryStringCollection); } string paramValue = paramValueFromQueryStringCollection; createdUriPath = createdUriPath.Replace("{" + paramName + "}", paramValue); } } return ((queryStringCollection != null) && queryStringCollection.Count > 0) ? string.Format("{0}?{1}", createdUriPath, queryStringCollection.ToString().ToLowerInvariant()) : createdUriPath; }