If you’ve needed to parse or construct a URI in C#, you’ve likely done it with the System.Uri class.
I put this script together to quickly show me the output of each of the System.Uri class methods. I used one of two test Uri’s. The first test Uri is a link to a web page, complete with every part of a Uri. The second is a link to an FTP server.
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { /* NOTE ABOUT ABSOLUTE PATHS: Check Uri.IsAbsoluteUri This property is true if the string or Uri instance that was passed into the constructor can be parsed as an absolute Uri instance, which contains a scheme, an authority, and a path. Otherwise, the Uri instance is treated as relative and might omit the scheme or other URI components. */ //string url = "https://some.cooldomain.com:3000/showcase/products/search?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS#Section2"; string url = "https://some.cooldomain.com:3000/showcase/products/search.aspx?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS#Section2"; //string url = "ftp://ftp2.census.gov/geo/tiger"; Uri u = new Uri(url); Console.WriteLine("Testing the String.Uri class, using the following URL:"); Console.WriteLine(url); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the absolute path of the Uri. The path is part after the domain and before the querystring. The absolute path starts at the web root. NOTE: This is only valid for absolute URI's. An exception is thrown if this is a realtive uri."); Console.WriteLine("pathescaped is u.AbsolutePath = "+ u.AbsolutePath); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the absolute URI. NOTE: This is only valid for absolute URI's. An exception is thrown if this is a realtive uri."); Console.WriteLine("uriescaped is u.AbsoluteUri = "+ u.AbsoluteUri); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the Domain Name System (DNS) host name or IP address and the port number for a server. NOTE: This is only valid for absolute URI's. An exception is thrown if this is a realtive uri."); Console.WriteLine("hostplusport is u.Authority = "+ u.Authority); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get an unescaped host name that is safe to use for DNS resolution. NOTE: This is only valid for absolute URI's. An exception is thrown if this is a realtive uri."); Console.WriteLine("dnssafehost is u.DnsSafeHost = "+ u.DnsSafeHost); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the host component of this instance. NOTE: This is only valid for absolute URI's. An exception is thrown if this is a realtive uri."); Console.WriteLine("host is u.Host = "+ u.Host); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get whether the Uri instance is absolute."); Console.WriteLine("isabsoluteuri is u.IsAbsoluteUri = "+ u.IsAbsoluteUri); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get whether the port value of the URI is the default for this scheme."); Console.WriteLine("isdefaultport is u.IsDefaultPort = "+ u.IsDefaultPort); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get a value indicating whether the specified Uri is a file URI."); Console.WriteLine("isfile is u.IsFile = "+ u.IsFile); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get whether the specified Uri references the local host."); Console.WriteLine("islocal is u.IsLoopback = "+ u.IsLoopback); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get whether the specified Uri is a universal naming convention (UNC) path."); Console.WriteLine("isunc is u.IsUnc = "+ u.IsUnc); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get a local operating-system representation of a file name. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("pathunescaped is u.LocalPath = "+ u.LocalPath); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the original URI string that was passed to the Uri constructor. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("originalstring is u.OriginalString = "+ u.OriginalString); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the AbsolutePath and Query properties separated by a question mark (?). NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("pathplusqueryescaped is u.PathAndQuery = "+ u.PathAndQuery); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the port number of this URI. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("port is u.Port = "+ u.Port); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get any query information included in the specified URI. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("queryescaped is u.Query = "+ u.Query); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the scheme name for this URI. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("protocol is u.Scheme = "+ u.Scheme); Console.WriteLine("//Get the Fragment portion of this URI. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("anchor is u.Fragment = "+ u.Fragment); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get an array containing the path segments that make up the specified URI. NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's."); Console.WriteLine("segments is u.Segments = "+ u.Segments); for(int i = 0; i < u.Segments.Length; i++) { Console.WriteLine( u.Segments[i]); } Console.WriteLine(Environment.NewLine); Console.WriteLine("//Indicates that the URI string was completely escaped before the Uri instance was created."); Console.WriteLine("userescaped is u.UserEscaped = "+ u.UserEscaped); Console.WriteLine(Environment.NewLine); Console.WriteLine("//Get the user name, password, or other user-specific information associated with the specified URI."); Console.WriteLine("//NOTE: while this: http://username:password@example.com/ is technically possible, it is no longer supported by IE or Chrome and so probably others. "); Console.WriteLine("//NOTE: Only valid for AbsoluteURI's. An exception is thrown for relative Uri's.");" Console.WriteLine("userinfo is u.UserInfo = "+ u.UserInfo); } }
Testing the String.Uri class, using the following URL: https://some.cooldomain.com:3000/showcase/products/search.aspx?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS#Section2 //Get the absolute path of the Uri. The path is part after the domain and before the querystring. The absolute path starts at the web root. pathescaped is u.AbsolutePath = /showcase/products/search.aspx //Get the absolute URI. uriescaped is u.AbsoluteUri = https://some.cooldomain.com:3000/showcase/products/search.aspx?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS#Section2 //Get the Domain Name System (DNS) host name or IP address and the port number for a server. hostplusport is u.Authority = some.cooldomain.com:3000 //Get an unescaped host name that is safe to use for DNS resolution. dnssafehost is u.DnsSafeHost = some.cooldomain.com //Get the host component of this instance. host is u.Host = some.cooldomain.com //Get whether the Uri instance is absolute. isabsoluteuri is u.IsAbsoluteUri = True //Get whether the port value of the URI is the default for this scheme. isdefaultport is u.IsDefaultPort = False //Get a value indicating whether the specified Uri is a file URI. isfile is u.IsFile = False //Get whether the specified Uri references the local host. islocal is u.IsLoopback = False //Get whether the specified Uri is a universal naming convention (UNC) path. isunc is u.IsUnc = False //Get a local operating-system representation of a file name. pathunescaped is u.LocalPath = /showcase/products/search.aspx //Get the original URI string that was passed to the Uri constructor. originalstring is u.OriginalString = https://some.cooldomain.com:3000/showcase/products/search.aspx?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS#Section2 //Get the AbsolutePath and Query properties separated by a question mark (?). pathplusqueryescaped is u.PathAndQuery = /showcase/products/search.aspx?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS //Get the port number of this URI. port is u.Port = 3000 //Get any query information included in the specified URI. queryescaped is u.Query = ?number=21&q=c%23+async+await&form=EDGEAR&qs=LS&cvid=4a865fdbf3ec4465a084c001c46a284f&cc=US&setlang=en-US&PC=DCTS //Get the scheme name for this URI. protocol is u.Scheme = https //Get an array containing the path segments that make up the specified URI. segments is u.Segments = System.String[] / showcase/ products/ search.aspx //Indicates that the URI string was completely escaped before the Uri instance was created. userescaped is u.UserEscaped = False //Get the user name, password, or other user-specific information associated with the specified URI. //NOTE: while this: http://username:password@example.com/ is technically possible, it is no longer supported by IE or Chrome and so probably others. userinfo is u.UserInfo = **************** FTP EXAMPLE ************ Testing the String.Uri class, using the following URL: ftp://ftp2.census.gov/geo/tiger //Get the absolute path of the URI. pathescaped is u.AbsolutePath = /geo/tiger //Get the absolute URI. uriescaped is u.AbsoluteUri = ftp://ftp2.census.gov/geo/tiger //Get the Domain Name System (DNS) host name or IP address and the port number for a server. hostplusport is u.Authority = ftp2.census.gov //Get an unescaped host name that is safe to use for DNS resolution. dnssafehost is u.DnsSafeHost = ftp2.census.gov //Get the host component of this instance. host is u.Host = ftp2.census.gov //Get whether the Uri instance is absolute. isabsoluteuri is u.IsAbsoluteUri = True //Get whether the port value of the URI is the default for this scheme. isdefaultport is u.IsDefaultPort = True //Get a value indicating whether the specified Uri is a file URI. isfile is u.IsFile = False //Get whether the specified Uri references the local host. islocal is u.IsLoopback = False //Get whether the specified Uri is a universal naming convention (UNC) path. isunc is u.IsUnc = False //Get a local operating-system representation of a file name. pathunescaped is u.LocalPath = /geo/tiger //Get the original URI string that was passed to the Uri constructor. originalstring is u.OriginalString = ftp://ftp2.census.gov/geo/tiger //Get the AbsolutePath and Query properties separated by a question mark (?). pathplusqueryescaped is u.PathAndQuery = /geo/tiger //Get the port number of this URI. port is u.Port = 21 //Get any query information included in the specified URI. queryescaped is u.Query = //Get the scheme name for this URI. protocol is u.Scheme = ftp //Get an array containing the path segments that make up the specified URI. segments is u.Segments = System.String[] / geo/ tiger //Indicates that the URI string was completely escaped before the Uri instance was created. userescaped is u.UserEscaped = False //Get the user name, password, or other user-specific information associated with the specified URI. //NOTE: while this: http://username:password@example.com/ is technically possible, it is no longer supported by IE or Chrome and so probably others. userinfo is u.UserInfo =
The second installment in my series of C# basics illustrates the proper use of access…
This page details the coding style I've adopted for C# code in my applications. You…
For the new C# section of my website, I wanted to post some notes that…
There are some pretty compelling reasons to lock down your LinkedIn account now. We bet…
We bet you didn't know that your full name, picture, work history, and more may…
I've always been a huge fan of O'Reilly's "In a Nutshell" series. C# in a…