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; }
/// <summary> /// Creates an query string for a facet /// </summary> /// <param name="facetQuery">The facet query.</param> /// <param name="facetName">Name of the facet.</param> /// <param name="facetValue">The facet value.</param> /// <returns>The query string for the facet.</returns> private static string GetFacetQueryString(string facetQuery, string facetName, string facetValue) { var facetCollection = new QueryStringCollection(); if (!string.IsNullOrEmpty(facetQuery)) { facetCollection.Parse(HttpUtility.UrlDecode(facetQuery)); } if (facetCollection.Contains(facetName)) { var facetQueryValues = facetCollection[facetName]; if (facetQueryValues.Contains(facetValue)) { var newFacetQueryValues = string.Empty; var facetValues = facetQueryValues.Split('|').Where(p => !string.Equals(p, facetValue, StringComparison.OrdinalIgnoreCase)).ToList(); if (facetValues.Count() > 0) { facetCollection.Set(facetName, string.Join("|", facetValues)); } else { facetCollection.Remove(facetName); } } else { facetCollection.Set(facetName, facetQueryValues + StorefrontConstants.QueryStrings.FacetsSeparator + facetValue); } } else { facetCollection.Add(facetName, facetValue); } return(facetCollection.ToString()); }
/// <summary> /// Creates an query string for a facet /// </summary> /// <param name="facetQuery">The facet query.</param> /// <param name="facetName">Name of the facet.</param> /// <param name="facetValue">The facet value.</param> /// <returns>The query string for the facet.</returns> private static string GetFacetQueryString(string facetQuery, string facetName, string facetValue) { var facetCollection = new QueryStringCollection(); if (!string.IsNullOrEmpty(facetQuery)) { facetCollection.Parse(HttpUtility.UrlDecode(facetQuery)); } if (facetCollection.Contains(facetName)) { var facetQueryValues = facetCollection[facetName]; if (facetQueryValues.Contains(facetValue)) { var newFacetQueryValues = string.Empty; var facetValues = facetQueryValues.Split('|').Where(p => !string.Equals(p, facetValue, StringComparison.OrdinalIgnoreCase)).ToList(); if (facetValues.Count() > 0) { facetCollection.Set(facetName, string.Join("|", facetValues)); } else { facetCollection.Remove(facetName); } } else { facetCollection.Set(facetName, facetQueryValues + StorefrontConstants.QueryStrings.FacetsSeparator + facetValue); } } else { facetCollection.Add(facetName, facetValue); } return facetCollection.ToString(); }