Exemple #1
0
        private void ParseQuery(StringBuilder actualUrl, int index)
        {
            int lastDelimiter = index;

            index++;
            string currentKey = null;

            for (; index < actualUrl.Length; index++)
            {
                switch (actualUrl[index])
                {
                case '&':
                    if (currentKey == null)
                    {
                        lastDelimiter = index;
                        break;
                    }

                    _query.AddValue(currentKey, actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1));
                    lastDelimiter = index;
                    currentKey    = null;
                    break;

                case '=':
                    currentKey    = actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1);
                    lastDelimiter = index;
                    break;

                case '%':
                    index = DecodeEscape(actualUrl, index);
                    break;

                case '#':
                    _query.AddValue(currentKey, actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1));
                    ParseFragment(actualUrl, index);
                    return;
                }
            }

            if (currentKey != null)
            {
                _query.AddValue(currentKey, actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1));
            }
            else
            {
                _query.AddValue(actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1), String.Empty);
            }
        }
Exemple #2
0
        private void ParseParameters(StringBuilder actualUrl, int index)
        {
            int lastDelimiter = index;

            index++;
            string currentKey = null;
            string value      = null;

            for (; index < actualUrl.Length; index++)
            {
                switch (actualUrl[index])
                {
                case ';':
                    value         = actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1);
                    lastDelimiter = index;
                    if ((String.IsNullOrEmpty(currentKey)) || (String.IsNullOrEmpty(value)))
                    {
                        currentKey = null;
                        break;
                    }

                    _parameters.AddValue(currentKey, value);
                    currentKey = null;
                    break;

                case '=':
                    currentKey    = actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1);
                    lastDelimiter = index;
                    break;

                case '%':
                    index = DecodeEscape(actualUrl, index);
                    break;
                }
            }

            if ((!String.IsNullOrEmpty(currentKey)) && (!String.IsNullOrEmpty(value = actualUrl.ToString(lastDelimiter + 1, index - lastDelimiter - 1))))
            {
                _parameters.AddValue(currentKey, value);
            }
        }