Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UrlBuilder"/> class
        /// with the specified <see cref="System.Uri"/> instance.
        /// </summary>
        /// <param name="uri">An instance of the <see cref="System.Uri"/> class.</param>
        /// <exception cref="System.ArgumentNullException">
        /// <paramref name="uri"/> is <see langword="null"/>.
        /// </exception>
        public UrlBuilder(Uri uri)
        {
            Requires.NotNull(uri, "uri");

            this.builder         = new UriBuilder(uri);
            this.queryParameters = new QueryStringParametersDictionary(uri.Query);
        }
Example #2
0
        public void CreateRequestMessage()
        {
            var client = new HttpClient();

            Assert.ThrowsException <InvalidOperationException>(() => { client.CreateRequestMessage(HttpMethod.Get, null); });
            Assert.ThrowsException <InvalidOperationException>(() => { client.CreateRequestMessage(HttpMethod.Get, new Uri("test", UriKind.Relative)); });

            client.BaseAddress = new Uri("https://example.com/");

            var requestMessage = client.CreateRequestMessage(HttpMethod.Get, null);

            Assert.IsNotNull(requestMessage);
            Assert.IsTrue(requestMessage.Method == HttpMethod.Get);
            Assert.AreEqual("https://example.com/", requestMessage.RequestUri.AbsoluteUri);

//            Assert.ThrowsException<InvalidOperationException>(() => { client.CreateRequestMessage(HttpMethod.Get, null); });

            requestMessage = client.CreateRequestMessage(HttpMethod.Get, new Uri("test", UriKind.Relative));

            Assert.IsNotNull(requestMessage);
            Assert.IsTrue(requestMessage.Method == HttpMethod.Get);
            Assert.AreEqual("https://example.com/test", requestMessage.RequestUri.AbsoluteUri);

            var queryStringParameters = new QueryStringParametersDictionary();

            queryStringParameters.Add("test", "testvalue");

            requestMessage = client.CreateRequestMessage(HttpMethod.Get, new Uri("test", UriKind.Relative), queryStringParameters);
            Assert.IsNotNull(requestMessage);
            Assert.IsTrue(requestMessage.Method == HttpMethod.Get);
            Assert.AreEqual("https://example.com/test?test=testvalue", requestMessage.RequestUri.AbsoluteUri);
            StringAssert.That.IsNotEmpty(requestMessage.RequestUri.Query);
        }
        public void BasicConstructors()
        {
            var q = new QueryStringParametersDictionary();
            Assert.IsNotNull(q);
            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);

            q = new QueryStringParametersDictionary(16);
            Assert.IsNotNull(q);
            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
        }
        public void BasicConstructors()
        {
            var q = new QueryStringParametersDictionary();

            Assert.IsNotNull(q);
            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);

            q = new QueryStringParametersDictionary(16);
            Assert.IsNotNull(q);
            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
        }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class
 /// with the specified scheme and host.
 /// </summary>
 /// <param name="scheme">An Internet access protocol.</param>
 /// <param name="host">A DNS-style domain name or IP address.</param>
 /// <param name="port">An IP port number for the service.</param>
 /// <param name="path">The path to the Internet resource.</param>
 /// <param name="extraValue">A query string or fragment identifier.</param>
 /// <exception cref="System.ArgumentException">
 /// <paramref name="extraValue"/> is neither <see langword="null"/>
 /// nor <see cref="System.String.Empty">System.String.Empty</see>, nor
 /// does a valid fragment identifier begin with a number sign (#), nor
 /// a valid query string begin with a question mark (?).
 /// </exception>
 /// <exception cref="System.ArgumentOutOfRangeException">
 /// <paramref name="port"/> is less than -1 or greater than 65,535.
 /// </exception>
 public UrlBuilder(UriScheme scheme, string host, int port, string path, string extraValue)
 {
     this.builder         = new UriBuilder(scheme, host, port, path, extraValue);
     this.queryParameters = new QueryStringParametersDictionary(this.builder.Query);
 }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class
 /// with the specified scheme and host.
 /// </summary>
 /// <param name="scheme">An Internet access protocol.</param>
 /// <param name="host">A DNS-style domain name or IP address.</param>
 /// <param name="port">An IP port number for the service.</param>
 /// <param name="path">The path to the Internet resource.</param>
 /// <exception cref="System.ArgumentOutOfRangeException">
 /// <paramref name="port"/> is less than -1 or greater than 65,535.
 /// </exception>
 public UrlBuilder(UriScheme scheme, string host, int port, string path)
 {
     this.builder         = new UriBuilder(scheme, host, port, path);
     this.queryParameters = new QueryStringParametersDictionary();
 }
        public void DictionaryConstructor()
        {
            var q = new QueryStringParametersDictionary(new Dictionary <string, string>());

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary <string, string>()
            {
                { "foo", "bar" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary <string, string>()
            {
                { "foo", "bar" },
                { "baz", "fuzz" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary <string, string>()
            {
                { "foo", "" },
                { "baz", "fuzz" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary <string, string>()
            {
                { "foo", "bar" },
                { "baz", "" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            Assert.ThrowsException <ArgumentNullException>(() => new QueryStringParametersDictionary((Dictionary <string, string>)null));
        }
        public void ParsingConstructor()
        {
            var q = new QueryStringParametersDictionary("");

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary((string)null);

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary("?foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("&foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=fuzz&");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("&foo=bar&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=&");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            Assert.ThrowsException <InvalidOperationException>(() => new QueryStringParametersDictionary("foo"));
        }
Example #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class 
 /// with the specified scheme and host.
 /// </summary>
 /// <param name="scheme">An Internet access protocol.</param>
 /// <param name="host">A DNS-style domain name or IP address.</param>
 /// <param name="port">An IP port number for the service.</param>
 /// <param name="path">The path to the Internet resource.</param>
 /// <exception cref="System.ArgumentOutOfRangeException">
 /// <paramref name="port"/> is less than -1 or greater than 65,535.
 /// </exception>
 public UrlBuilder(UriScheme scheme, string host, int port, string path)
 {
     this.builder = new UriBuilder(scheme, host, port, path);
     this.queryParameters = new QueryStringParametersDictionary();
 }
        public void ParsingConstructor()
        {
            var q = new QueryStringParametersDictionary("");

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary((string)null);

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary("?foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("&foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=fuzz&");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("&foo=bar&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=&baz=fuzz");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            q = new QueryStringParametersDictionary("foo=bar&baz=&");

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            ExceptionAssert.Throws<InvalidOperationException>(() => new QueryStringParametersDictionary("foo"));
        }
        public void DictionaryConstructor()
        {
            var q = new QueryStringParametersDictionary(new Dictionary<string, string>());

            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Keys.Count);
            Assert.AreEqual(0, q.Values.Count);
            Assert.AreEqual("", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary<string, string>()
            {
                { "foo", "bar" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(1, q.Keys.Count);
            Assert.AreEqual(1, q.Values.Count);
            Assert.AreEqual("foo", q.Keys.First());
            Assert.AreEqual("bar", q["foo"]);
            Assert.AreEqual("foo=bar", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary<string, string>()
            {
                { "foo", "bar" },
                { "baz", "fuzz" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=bar&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary<string, string>()
            {
                { "foo", "" },
                { "baz", "fuzz" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("fuzz", q["baz"]);
            Assert.AreEqual("foo=&baz=fuzz", q.ToQueryString());

            q = new QueryStringParametersDictionary(new Dictionary<string, string>()
            {
                { "foo", "bar" },
                { "baz", "" }
            });

            Assert.AreNotEqual(0, q.Count);
            Assert.AreEqual(2, q.Keys.Count);
            Assert.AreEqual(2, q.Values.Count);
            Assert.AreEqual("baz", q.Keys.Skip(1).First());
            Assert.AreEqual("", q["baz"]);
            Assert.AreEqual("foo=bar&baz=", q.ToQueryString());

            ExceptionAssert.Throws<ArgumentNullException>(() => new QueryStringParametersDictionary((Dictionary<string, string>)null));
        }
Example #12
0
        public static HttpRequestMessage CreateRequestMessage(this HttpClient httpClient, HttpMethod method, Uri uri, QueryStringParametersDictionary queryStringParameters = null, IDictionary <string, string> headerCollection = null)
        {
            Uri requestUri = null;

            if ((uri == null) && (httpClient.BaseAddress == null))
            {
                throw new InvalidOperationException("SR.net_http_client_invalid_requesturi");
            }
            if (uri == null)
            {
                requestUri = httpClient.BaseAddress;
            }
            else
            {
                // If the request Uri is an absolute Uri, just use it. Otherwise try to combine it with the base Uri.
                if (!uri.IsAbsoluteUri)
                {
                    if (httpClient.BaseAddress == null)
                    {
                        throw new InvalidOperationException("SR.net_http_client_invalid_requesturi");
                    }
                    else
                    {
                        requestUri = new Uri(httpClient.BaseAddress, uri);
                    }
                }
            }

            if (queryStringParameters != null)
            {
                var builder = new UriBuilder(requestUri)
                {
                    Query = queryStringParameters.ToQueryString()
                };

                requestUri = builder.Uri;
            }

            var requestMessge = new HttpRequestMessage(method, requestUri);

            if (headerCollection != null)
            {
                foreach (var header in headerCollection)
                {
                    requestMessge.Headers.Add(header.Key, header.Value);
                }
            }

            return(requestMessge);
        }
Example #13
0
 public UrlBuilder(string uri)
 {
     this.builder = new UriBuilder(uri);
     this.queryParameters = new QueryStringParametersDictionary(this.builder.Query);
 }
Example #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class.
 /// </summary>
 public UrlBuilder()
 {
     this.builder = new UriBuilder();
     this.queryParameters = new QueryStringParametersDictionary();
 }
Example #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class 
 /// with the specified scheme and host.
 /// </summary>
 /// <param name="scheme">An Internet access protocol.</param>
 /// <param name="host">A DNS-style domain name or IP address.</param>
 /// <param name="port">An IP port number for the service.</param>
 /// <param name="path">The path to the Internet resource.</param>
 /// <param name="extraValue">A query string or fragment identifier.</param>
 /// <exception cref="System.ArgumentException">
 /// <paramref name="extraValue"/> is neither <see langword="null"/>
 /// nor <see cref="System.String.Empty">System.String.Empty</see>, nor
 /// does a valid fragment identifier begin with a number sign (#), nor
 /// a valid query string begin with a question mark (?).
 /// </exception>
 /// <exception cref="System.ArgumentOutOfRangeException">
 /// <paramref name="port"/> is less than -1 or greater than 65,535.
 /// </exception>
 public UrlBuilder(UriScheme scheme, string host, int port, string path, string extraValue)
 {
     this.builder = new UriBuilder(scheme, host, port, path, extraValue);
     this.queryParameters = new QueryStringParametersDictionary(this.builder.Query);
 }
Example #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UrlBuilder"/> class.
 /// </summary>
 public UrlBuilder()
 {
     this.builder         = new UriBuilder();
     this.queryParameters = new QueryStringParametersDictionary();
 }
Example #17
0
 public UrlBuilder(string uri)
 {
     this.builder         = new UriBuilder(uri);
     this.queryParameters = new QueryStringParametersDictionary(this.builder.Query);
 }
Example #18
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UrlBuilder"/> class 
        /// with the specified <see cref="System.Uri"/> instance.
        /// </summary>
        /// <param name="uri">An instance of the <see cref="System.Uri"/> class.</param>
        /// <param name="path">The path to the Internet resource.</param>
        /// <exception cref="System.ArgumentNullException">
        /// <paramref name="uri"/> is <see langword="null"/>.
        /// </exception>
        public UrlBuilder(Uri uri, string path)
        {
            Requires.NotNull(uri, "uri");

            this.builder = new UriBuilder(uri);
            this.queryParameters = new QueryStringParametersDictionary(uri.Query);
            this.builder.Path = path;
        }