/// <inheritdoc />
    public string Parse(string input, IEnumerable <Match> matches)
    {
        var queryDict = _httpContextService.GetQueryStringDictionary();

        foreach (var match in matches)
        {
            var queryStringName = match.Groups[2].Value;
            queryDict.TryGetValue(queryStringName, out var replaceValue);

            input = input.Replace(match.Value, replaceValue);
        }

        return(input);
    }
        public string Parse(string input, IEnumerable <Match> matches)
        {
            var queryDict = _httpContextService.GetQueryStringDictionary();

            foreach (var match in matches)
            {
                if (match.Groups.Count != 3)
                {
                    continue;
                }

                var queryStringName = match.Groups[2].Value;
                queryDict.TryGetValue(queryStringName, out var replaceValue);

                replaceValue = WebUtility.UrlEncode(replaceValue);
                input        = input.Replace(match.Value, replaceValue);
            }

            return(input);
        }
        public ConditionCheckResultModel Validate(string stubId, StubConditionsModel conditions)
        {
            var result = new ConditionCheckResultModel();
            var queryStringConditions = conditions?.Url?.Query;

            if (queryStringConditions == null || queryStringConditions?.Any() != true)
            {
                return(result);
            }

            var validQueryStrings = 0;
            var queryString       = _httpContextService.GetQueryStringDictionary();

            foreach (var condition in queryStringConditions)
            {
                // Check whether the condition query is available in the actual query string.
                if (!queryString.TryGetValue(condition.Key, out var queryValue))
                {
                    continue;
                }

                // Check whether the condition query value is available in the actual query string.
                var value = condition.Value ?? string.Empty;
                if (!StringHelper.IsRegexMatchOrSubstring(queryValue, value))
                {
                    // If the check failed, it means the query string is incorrect and the condition should fail.
                    result.Log = $"Query string condition '{condition.Key}: {condition.Value}' failed.";
                    break;
                }

                validQueryStrings++;
            }

            // If the number of succeeded conditions is equal to the actual number of conditions,
            // the query string condition is passed and the stub ID is passed to the result.
            result.ConditionValidation = validQueryStrings == queryStringConditions.Count
                ? ConditionValidationType.Valid
                : ConditionValidationType.Invalid;

            return(result);
        }