在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
[转载] http://www.cnblogs.com/kissdodog/archive/2013/04/22/3034898.html System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类。 01、属性 目录 AbsolutePath 获取 URI 的绝对路径。 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(); } } 02、方法 目录 CheckHostName 确定指定的主机名是否为有效的 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 是一个枚举,定义主机名类型 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对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码,可对参数编码 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转义 //Uri.EscapeUriString对空格进行了编码,也对中文进行了编码,但对冒号(:)、斜杠(/)和井号(#)未编码,所以此方法可以用于网址进行编码,但不能对参数进行编码 //Uri.EscapeUriString对URI的网址部分编码,用Uri.EscapeDataString对URI中传递的参数进行编码。 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还原成不转义的形式 Console.WriteLine(Uri.FromHex('A')); //输出 10 获取16进制数字的十进制值 Console.WriteLine(Uri.HexEscape('2')); //输出 %32 转换它的等效十六进制字符。 Console.WriteLine(Uri.IsHexDigit('F')); //输出True 确定指定的字符是否为有效的十六进制数字。 int index = 0; if (Uri.IsHexEncoding("%75", index)) Console.WriteLine("该编码代表的字符是 :{0}", Uri.HexUnescape("%75", ref index)); else Console.WriteLine("这不是16禁止编码"); //以下两个实例方法GetLeftPart与GetComponents都用于获取Uri中的一部分,可以是端口,方案,参数等等。 Console.WriteLine(uri.GetComponents(UriComponents.Scheme,UriFormat.Unescaped)); //输出 http 获取Uri中的一部分,两个参数都是枚举 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也可用于相对路径转绝对路径,返回一个新的uri并且不成功时不报异常 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 //再来一个 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 //这样就表示目录相同,文件名不同,相对于第一个调用Uri来说的 //确定文件是否不需要转义,没特殊字符就不需要转移 //以下两个方法基本一致,只是一个是静态方法,一个是实例方法而已 Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com", UriKind.Absolute)); //输出 True UriKind是一个枚举 Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com/123.html?名字=张三", UriKind.Absolute)); //输出 False 表示需要转义 Console.WriteLine(uri.IsWellFormedOriginalString()); //True 此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义。 Uri uri8 = new Uri("http://www.baidu.com/123.html?名字=张三"); Console.WriteLine(uri8.IsWellFormedOriginalString()); //输出False Console.ReadKey(); } } 03、常用的功能,相对Uri转绝对Uri 目录 有时间要看好点,这个类还是很有用的。 另附上一个常用的功能,相对Uri转绝对Uri,这是是利用构造函数实现的,传入一个baseUri就能够实现,如如下代码: static void Main(string[] args) { Uri uri = new Uri("http://www.jmeii.com/a/b/index.html"); Uri uri2 = new Uri(uri,"../123.html"); Console.WriteLine(uri2.ToString()); //输出http://www.jmeii.com/a/123.html Console.ReadKey(); } |
请发表评论