Пример #1
0
        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);
        }
Пример #2
0
        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();
        }