Beispiel #1
0
        /// <summary>
        /// Parses a query string.
        /// </summary>
        /// <param name="queryString">Query string (URI encoded)</param>
        /// <param name="contentEncoding">Content encoding</param>
        /// <returns>A <see cref="HttpInput"/> object if successful; otherwise <see cref="HttpInput.Empty"/></returns>
        /// <exception cref="ArgumentNullException"><c>queryString</c> is <c>null</c>.</exception>
        /// <exception cref="FormatException">If string cannot be parsed.</exception>
        public static HttpInput ParseQueryString(string queryString, Encoding contentEncoding)
        {
            if (queryString == null)
                throw new ArgumentNullException("queryString");
            if (queryString == string.Empty)
                return HttpInput.Empty;

            HttpInput input = new HttpInput("QueryString");

            queryString = queryString.TrimStart('?', '&');

            // a simple value.
            /*
            if (queryString.IndexOf("&") == -1 && !queryString.Contains("%3d") && !queryString.Contains("%3D") && !queryString.Contains("="))
            {
                input.Add(string.Empty, queryString);
                return input;
            }*/
            if (queryString.IndexOf("&") == -1 && !queryString.Contains("="))
            {
                input.Add(string.Empty, queryString);
                return input;
            }

            int state = 0;
            int startpos = 0;
            string name = null;
            for (int i = 0; i < queryString.Length; ++i)
            {
                int newIndexPos;
                if (state == 0 && IsEqual(queryString, ref i, out newIndexPos))
                {
                    name = queryString.Substring(startpos, i - startpos);
                    i = newIndexPos;
                    startpos = i + 1;
                    ++state;
                }
                else if (state == 1 && IsAmp(queryString, ref i, out newIndexPos))
                {
                    Add(input, name, queryString.Substring(startpos, i - startpos), contentEncoding);
                    i = newIndexPos;
                    startpos = i + 1;
                    state = 0;
                    name = null;
                }
            }

            if (state == 0 && !input.GetEnumerator().MoveNext())
                throw new FormatException("Not a valid query string: " + queryString);

            if (startpos <= queryString.Length)
            {
                if (name != null)
                    Add(input, name, queryString.Substring(startpos, queryString.Length - startpos), contentEncoding);
                else
                    Add(input, string.Empty, queryString.Substring(startpos, queryString.Length - startpos), contentEncoding);
            }

            return input;
        }
Beispiel #2
0
        /// <summary>
        /// Parses a querystring.
        /// </summary>
        /// <param name="queryString">Querystring (url decoded)</param>
        /// <returns>A HttpInput object if successful; otherwise HttpInput.Empty</returns>
        public static HttpInput ParseQueryString(string queryString)
        {
            if (queryString == null)
                throw new ArgumentNullException("queryString");
            if (queryString == String.Empty)
                return HttpInput.Empty;

            int state = 0;
            int startpos = 0;
            string name = null;
            HttpInput input = new HttpInput("QueryString");
            for (int i = 0; i < queryString.Length; ++i)
            {
                int newIndexPos;
                if (state == 0 && IsEqual(queryString, ref i, out newIndexPos))
                {
                    name = queryString.Substring(startpos, i - startpos);
                    i = newIndexPos;
                    startpos = i + 1;
                    ++state;
                }
                else if (state == 1 && IsAmp(queryString, ref i, out newIndexPos))
                {
                    Add(input, name, queryString.Substring(startpos, i - startpos));
                    i = newIndexPos;
                    startpos = i + 1;
                    state = 0;
                    name = null;
                }
            }

            if (state == 0 && !input.GetEnumerator().MoveNext())
                Add(input, queryString, String.Empty);
            else if (name != null && startpos <= queryString.Length)
                Add(input, name, queryString.Substring(startpos, queryString.Length - startpos));

            return input;
        }
        public void TestNoQueryValues()
        {
            HttpInput result = HttpHelper.ParseQueryString("");

            Assert.False(result.GetEnumerator().MoveNext());
        }