Search code examples
c#.neturi

Add scheme to URL if needed


To create a Uri from a string you can do this:

Uri u = new Uri("example.com");

But the problem is if the string (like the one above) doesn't contain the protocol you will get an exception: "Invalid URI: The format of the URI could not be determined."

To avoid the exception you should secure the string includes a protocol, like below:

Uri u = new Uri("http://example.com");

But if you take the url as input, how can you add the protocol if it's missing?
I mean apart from some IndexOf/Substring manipulation?

Something elegant and fast?


Solution

  • You could also use UriBuilder:

    public static Uri GetUri(this string s)
    {
        return new UriBuilder(s).Uri;
    }
    

    Remarks from MSDN:

    This constructor initializes a new instance of the UriBuilder class with the Fragment, Host, Path, Port, Query, Scheme, and Uri properties set as specified in uri.

    If uri does not specify a scheme, the scheme defaults to "http:".