Skip to content

Instantly share code, notes, and snippets.

@flakey-bit
Last active November 7, 2019 22:00
  • Select an option

Select an option

Revisions

  1. flakey-bit renamed this gist Nov 7, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. flakey-bit revised this gist Nov 7, 2019. No changes.
  3. flakey-bit revised this gist Nov 7, 2019. 1 changed file with 7 additions and 2 deletions.
    9 changes: 7 additions & 2 deletions BuildRequestUri.cs
    Original file line number Diff line number Diff line change
    @@ -1,12 +1,17 @@
    public static Uri BuildRequestUri(string baseUri, string pathSuffix=null, IDictionary<string, object> queryParameters=null)
    public static Uri ComposeRequestUri(string baseUri, string pathSuffix=null, IDictionary<string, object> queryParameters=null)
    {
    if (string.IsNullOrEmpty(baseUri))
    {
    throw new ArgumentException($"{nameof(baseUri)} is required", nameof(baseUri));
    }

    var uri = new Uri(baseUri);

    if (!string.IsNullOrEmpty(pathSuffix))
    {
    if (pathSuffix.StartsWith("/"))
    {
    throw new ArgumentException("Path suffix must be relative");
    throw new ArgumentException($"{nameof(pathSuffix)} must be relative");
    }

    uri = new Uri(uri, pathSuffix);
  4. flakey-bit created this gist Nov 7, 2019.
    34 changes: 34 additions & 0 deletions BuildRequestUri.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,34 @@
    public static Uri BuildRequestUri(string baseUri, string pathSuffix=null, IDictionary<string, object> queryParameters=null)
    {
    var uri = new Uri(baseUri);

    if (!string.IsNullOrEmpty(pathSuffix))
    {
    if (pathSuffix.StartsWith("/"))
    {
    throw new ArgumentException("Path suffix must be relative");
    }

    uri = new Uri(uri, pathSuffix);
    }

    var uriBuilder = new UriBuilder(uri);

    if (uriBuilder.Uri.IsDefaultPort)
    {
    uriBuilder.Port = -1; // Omit port in Uri if it's the default port for the scheme
    }

    if (queryParameters != null)
    {
    var query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query);
    foreach (var pair in queryParameters)
    {
    query[pair.Key] = pair.Value.ToString();
    }

    uriBuilder.Query = query.ToString();
    }

    return uriBuilder.Uri;
    }