示例#1
0
        private string RequestCore(string address)
        {
            _output = GeoCoderOutput.Xml;

            var queryString = new QueryStringParameterCollection();

            queryString.Add("address", address);
            queryString.Add("sensor", "false");

            var url = string.Format("{0}/{1}{2}", ApiUrl, _output.ToString().ToLowerInvariant(), queryString);

            var req = (HttpWebRequest)WebRequest.Create(url);
            var res = (HttpWebResponse)req.GetResponse();

            string responseString;

            if (res == null)
            {
                throw new WebException("Can't get response from service.");
            }

            var responseContent = res.GetResponseStream();

            if (responseContent == null)
            {
                throw new WebException("Can't get response from service.");
            }

            using (var reader = new StreamReader(responseContent))
            {
                responseString = reader.ReadToEnd();
            }

            return(responseString);
        }
        public void OriginalQueryStringValuesArePreservedWhenAddingEmptyQuery()
        {
            var query  = new QueryStringParameterCollection();
            var result = UriUtility.AddQuery("path?a=1", query);

            Assert.AreEqual("path?a=1", result);
        }
示例#3
0
        public void QueryStringParameterCollectionCanParseMultipleValuesWithTheSameName()
        {
            var collection = QueryStringParameterCollection.Parse("a=1&a=2&a=3");

            CollectionAssert.AreEquivalent(new[] { "1", "2", "3" },
                                           collection.Collection.GetValues("a"));
        }
示例#4
0
        public void QueryStringParameterCollectionAddsMultipleValuesForEnumerableTypes()
        {
            var collection = new QueryStringParameterCollection();

            collection.Add("value", new[] { "1", "2", "3" });

            CollectionAssert.AreEquivalent(new[] { "1", "2", "3" }, collection.Collection.GetValues("value"));
        }
示例#5
0
        public void QueryStringParameterCollectionEncodesParameterValues(string value, string expected)
        {
            var collection = new QueryStringParameterCollection();

            collection.Add("value", value);

            Assert.AreEqual(expected, collection.ToString());
        }
示例#6
0
        public void QueryStringParameterCollectionCanContainMultipleValuesWithTheSameName()
        {
            var collection = new QueryStringParameterCollection();

            collection.Add("a", "1");
            collection.Add("a", "2");

            CollectionAssert.AreEqual(new[] { "1", "2" }, collection.Collection.GetValues("a"));
        }
        public void QueryStringValuesAreAddedToUri()
        {
            var query = new QueryStringParameterCollection()
            {
                { "a", "1" }
            };
            var result = UriUtility.AddQuery("path", query);

            Assert.AreEqual("path?a=1", result);
        }
示例#8
0
        public void QueryStringParameterCollectionDoesNotInterpretStringsAsACollectionOfCharacters()
        {
            const string value      = "12345";
            var          collection = QueryStringParameterCollection.FromObject(new { a = value });

            var result = collection.Collection.GetValues("a");

            CollectionAssert.AreEquivalent(new string[1] {
                value
            }, result);
        }
示例#9
0
        public void QueryStringParameterCollectionIncludesMultipleValuesWithTheSameNameInStringRepresentation()
        {
            var collection = new QueryStringParameterCollection()
            {
                { "a", "1" },
                { "a", "2" },
                { "b", "3" }
            };

            Assert.AreEqual("a=1&a=2&b=3", collection.ToString());
        }
示例#10
0
        public static NameValueCollection ParseQueryString(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            var valueToUse = value.StartsWith("?", StringComparison.Ordinal)
                ? value.Substring(1)
                : value;
            var result = new QueryStringParameterCollection();

            if (valueToUse.Length == 0)
            {
                return(result);
            }

            var parameters = valueToUse.Split(ParameterSeparator);

            foreach (var parameter in parameters)
            {
                var nameAndValue = parameter.Split(NameAndValueSeparator, count: 2);
                switch (nameAndValue.Length)
                {
                case 1:
                    result.Add(null, WebUtility.UrlDecode(nameAndValue[0]));
                    break;

                case 2:
                    result.Add(WebUtility.UrlDecode(nameAndValue[0]), WebUtility.UrlDecode(nameAndValue[1]));
                    break;

                default:
                    throw Throw.UnexpectedCase(nameAndValue.Length);
                }
            }

            return(result);
        }
示例#11
0
        public void QueryStringParameterCollectionIgnoresNullValuesWhenConstructingFromObject()
        {
            var collection = QueryStringParameterCollection.FromObject(new { a = (string)null });

            CollectionAssert.DoesNotContain(collection.Names.ToArray(), "a");
        }
示例#12
0
        public void QueryStringParameterCollectionIgnoresLeadingQuestionMarkInParseValue()
        {
            var collection = QueryStringParameterCollection.Parse("?name=value");

            CollectionAssert.AreEquivalent(new[] { "name" }, collection.Names.ToArray());
        }
示例#13
0
        public void QueryStringParameterCollectionDecodesParameterValues(string query, string expectedValue)
        {
            var collection = QueryStringParameterCollection.Parse(query);

            Assert.AreEqual(expectedValue, collection.Collection["value"]);
        }