System.Uri類用于處理Uri地址信息,常用到它的地方有,相對(duì)Uri地址轉(zhuǎn)絕對(duì)Uri地址,獲取Uri的某部分信息等等,可以說是一個(gè)非常有用的類。 一、屬性 AbsolutePath 獲取 URI 的絕對(duì)路徑。 class Program { static void Main(string[] args) { Uri uri = new Uri("http://www.baidu.com:80/2013/123.html?id=1"); Console.WriteLine(uri.AbsolutePath); //輸出 /2013/123.html Console.WriteLine(uri.AbsoluteUri); //輸出 http://www.baidu.com/2013/123.html?id=1 Console.WriteLine(uri.Authority); //輸出 www.baidu.com Console.WriteLine(uri.DnsSafeHost); //輸出 www.baidu.com Console.WriteLine(uri.Fragment); //輸出 Console.WriteLine(uri.Host); //輸出 www.baidu.com Console.WriteLine(uri.IsAbsoluteUri); //輸出 True Console.WriteLine(uri.IsDefaultPort); //輸出 True Console.WriteLine(uri.IsFile); //輸出 False Uri uri1 = new Uri(@"D:\test\test.txt"); Console.WriteLine(uri1.IsFile); //輸出 True Console.WriteLine(uri.IsLoopback); //輸出 False Console.WriteLine(uri1.IsLoopback); //輸出 True Console.WriteLine(uri.IsUnc); //輸出 False Console.WriteLine(uri.LocalPath); //輸出 /2013/123.html Console.WriteLine(uri.OriginalString); //輸出 http://www.baidu.com:80/2013/123.html Console.WriteLine(uri.PathAndQuery); //輸出 /2013/123.html?id=1 Console.WriteLine(uri.Port); //輸出 80 Console.WriteLine(uri.Query); //輸出 ?id=1 Console.WriteLine(uri.Scheme); //輸出 http string[] strArr = uri.Segments; foreach (string str in strArr) { Console.WriteLine(str); //輸出 / 2013/ 123.html } Console.WriteLine(uri.UserEscaped); //輸出 False; Console.WriteLine(uri.UserInfo); //輸出 Console.ReadKey(); } } 二、方法 CheckHostName 確定指定的主機(jī)名是否為有效的 DNS 名稱。 class Program { static void Main(string[] args) { Uri uri = new Uri("http://www.baidu.com:80/2013/123.html?id=1"); UriHostNameType unt = Uri.CheckHostName("http://www.baidu.com"); Console.WriteLine(unt.ToString()); //輸出Unknown UriHostNameType 是一個(gè)枚舉,定義主機(jī)名類型 Console.WriteLine(Uri.CheckSchemeName("http://www.baidu.com")); //輸出 False Console.WriteLine(Uri.CheckSchemeName("http")); //輸出 True Console.WriteLine(Uri.CheckSchemeName("https")); //輸出 True //Uri uri1 = new Uri("http://www.baidu.com"); //Uri.Compare(uri,uri1); //Uri.EscapeDataString對(duì)冒號(hào)(:)、斜杠(/)、空格、中文、井號(hào)(#)都進(jìn)行了編碼,可對(duì)參數(shù)編碼 Console.WriteLine(Uri.EscapeDataString("http://www.baidu.com:80/2013/123.html?id=1")); //輸出 http%3A%2F%2Fwww.baidu.com%3A80%2F2013%2F123.html%3Fid%3D1 Uri轉(zhuǎn)義 //Uri.EscapeUriString對(duì)空格進(jìn)行了編碼,也對(duì)中文進(jìn)行了編碼,但對(duì)冒號(hào)(:)、斜杠(/)和井號(hào)(#)未編碼,所以此方法可以用于網(wǎng)址進(jìn)行編碼,但不能對(duì)參數(shù)進(jìn)行編碼 //Uri.EscapeUriString對(duì)URI的網(wǎng)址部分編碼,用Uri.EscapeDataString對(duì)URI中傳遞的參數(shù)進(jìn)行編碼。 Console.WriteLine(Uri.EscapeUriString("http://www.baidu.com:80/2013/123.html?id=1&你好"));//輸出 http://www.baidu.com:80/2013/123.html?id=1&%E4%BD%A0%E5%A5%BD string str = "http%3A%2F%2Fwww.baidu.com%3A80%2F2013%2F123.html%3Fid%3D1"; Console.WriteLine(Uri.UnescapeDataString(str)); //輸出 http://www.baidu.com:80/2013/123.html?id=1 , 將Url還原成不轉(zhuǎn)義的形式 Console.WriteLine(Uri.FromHex('A')); //輸出 10 獲取16進(jìn)制數(shù)字的十進(jìn)制值 Console.WriteLine(Uri.HexEscape('2')); //輸出 %32 轉(zhuǎn)換它的等效十六進(jìn)制字符。 Console.WriteLine(Uri.IsHexDigit('F')); //輸出True 確定指定的字符是否為有效的十六進(jìn)制數(shù)字。 int index = 0; if (Uri.IsHexEncoding("%75", index)) Console.WriteLine("該編碼代表的字符是 :{0}", Uri.HexUnescape("%75", ref index)); else Console.WriteLine("這不是16禁止編碼"); //以下兩個(gè)實(shí)例方法GetLeftPart與GetComponents都用于獲取Uri中的一部分,可以是端口,方案,參數(shù)等等。 Console.WriteLine(uri.GetComponents(UriComponents.Scheme,UriFormat.Unescaped)); //輸出 http 獲取Uri中的一部分,兩個(gè)參數(shù)都是枚舉 Console.WriteLine(uri.GetLeftPart(UriPartial.Scheme)); //輸出 http:// Uri uri1 = new Uri("Http://www.baidu.com"); Console.WriteLine(uri.IsBaseOf(uri1)); //輸出 False Console.WriteLine(uri1.IsBaseOf(uri)); //輸出 True //TryCreate也可用于相對(duì)路徑轉(zhuǎn)絕對(duì)路徑,返回一個(gè)新的uri并且不成功時(shí)不報(bào)異常 Uri uri2 = new Uri("http://www.baidu.com/a/b/c.html"); Uri uri3; Uri.TryCreate(uri2,"../123.html",out uri3); Console.WriteLine(uri3); //輸出 http://www.baidu.com/a/123.html Uri uri4 = uri2.MakeRelativeUri(uri3); Console.WriteLine(uri4); //輸出..123/html //再來一個(gè) Uri uri5 = new Uri("http://www.baidu.com/a/b/d.html"); Uri uri6 = new Uri("http://www.baidu.com/a/b/c.html"); Uri uri7 = uri5.MakeRelativeUri(uri6); Console.WriteLine(uri7); //輸出 c.html //這樣就表示目錄相同,文件名不同,相對(duì)于第一個(gè)調(diào)用Uri來說的 //確定文件是否不需要轉(zhuǎn)義,沒特殊字符就不需要轉(zhuǎn)移 //以下兩個(gè)方法基本一致,只是一個(gè)是靜態(tài)方法,一個(gè)是實(shí)例方法而已 Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com", UriKind.Absolute)); //輸出 True UriKind是一個(gè)枚舉 Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com/123.html?名字=張三", UriKind.Absolute)); //輸出 False 表示需要轉(zhuǎn)義 Console.WriteLine(uri.IsWellFormedOriginalString()); //True 此 Uri 的字符串是否格式良好,以及它是否不需要進(jìn)一步轉(zhuǎn)義。 Uri uri8 = new Uri("http://www.baidu.com/123.html?名字=張三"); Console.WriteLine(uri8.IsWellFormedOriginalString()); //輸出False Console.ReadKey(); } } 有時(shí)間要看好點(diǎn),這個(gè)類還是很有用的。 另附上一個(gè)常用的功能,相對(duì)Uri轉(zhuǎn)絕對(duì)Uri,這是是利用構(gòu)造函數(shù)實(shí)現(xiàn)的,傳入一個(gè)baseUri就能夠?qū)崿F(xiàn),如如下代碼: static void Main(string[] args) { Uri uri = new Uri("http://www./a/b/index.html"); Uri uri2 = new Uri(uri,"../123.html"); Console.WriteLine(uri2.ToString()); //輸出http://www./a/123.html Console.ReadKey(); }
|
|