System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类。

一、属性

AbsolutePath   获取 URI 的绝对路径。 
AbsoluteUri     获取绝对 URI。 
Authority      获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。 
DnsSafeHost   获得可安全用于 DNS 解析的未转义主机名。 
Fragment     获取转义 URI 片段。 
Host        获取此实例的主机部分。 
HostNameType  获取 URI 中指定的主机名的类型。 
IsAbsoluteUri   获取一个值,该值指示 Uri 实例是否为绝对 URI。 
IsDefaultPort   获取一个值,该值指示 URI 的端口值是否为此方案的默认值。 
IsFile       获取一个值,该值指示指定的 Uri 是否为文件 URI。 
IsLoopback     获取一个值,该值指示指定的 Uri 是否引用了本地主机。 
IsUnc       获取一个值,该值指示指定的 Uri 是否为统一命名约定 (UNC) 路径。 
LocalPath     获取文件名的本地操作系统表示形式。 
OriginalString   获取传递给 Uri 构造函数的原始 URI 字符串。 
PathAndQuery   获取用问号 (?) 分隔的 AbsolutePath 和 Query 属性。 
Port         获取此 URI 的端口号。 
Query       获取指定 URI 中包括的任何查询信息。 
Scheme      获取此 URI 的方案名称。 
Segments     获取包含构成指定 URI 的路径段的数组。 
UserEscaped     指示 URI 字符串在创建 Uri 实例之前已被完全转义。 
UserInfo       获取用户名、密码或其他与指定 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();
}
}

二、方法

CheckHostName     确定指定的主机名是否为有效的 DNS 名称。 
CheckSchemeName    确定指定的方案名是否有效。 
Compare          使用指定的比较规则比较两个 URI 的指定部分。 
EscapeDataString    将字符串转换为它的转义表示形式。 
EscapeUriString     将 URI 字符串转换为它的转义表示形式。 
FromHex          获取十六进制数字的十进制值。 
GetComponents     使用特殊字符的指定转义,获取当前实例的指定部分。 
GetLeftPart        获取 Uri 实例的指定部分。 
GetObjectData       返回序列化当前实例所需的数据。 
HexEscape         将指定的字符转换它的等效十六进制字符。 
HexUnescape       将字符的指定十六进制表示形式转换为字符。 
IsBaseOf         确定当前的 Uri 实例是否为指定 Uri 实例的基。 
IsHexDigit        确定指定的字符是否为有效的十六进制数字。 
IsHexEncoding       确定字符串中的一个字符是否为十六进制编码。 
IsWellFormedOriginalString   指示用于构造此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义。 
IsWellFormedUriString   通过尝试用字符串构造一个 URI 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义。 
MakeRelativeUri      确定两个 Uri 实例之间的差异。 
TryCreate         已重载。 创建一个新的 Uri。在无法创建 Uri 时不引发异常。 
UnescapeDataString   将字符串转换为它的非转义表示形式。

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();
}
}

  有时间要看好点,这个类还是很有用的。

  另附上一个常用的功能,相对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();
}

C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等的更多相关文章

  1. System.Uri类 - 获取Url的各种属性,文件名,参数,域名,端口等等

    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类. 一.属性 AbsolutePath 获取 URI ...

  2. .net获取当前url各种属性(文件名、参数、域名、端口等)的方法(转)

    假设当前页完整地址是:http://www.test.com:80/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www ...

  3. 78、WebClient实现上传下载 System.Net、System.Uri类

    高层类.使用简单.均支持异步版本.支持http,https,fpt,files等URI. 一.下载 方法: Stream= client.OpenRead(serverUri): 打开一个可读的流.对 ...

  4. js原生_获取url键值对

    思路: 1.先对url进行处理,获取 ?后的字符串 postid=10457794&actiontip=保存修改成功') 2. 字符串通过&标识,不同参数转为数组 ["pos ...

  5. php获取url字符串截取路径的文件名和扩展名

    <?php //获取连接里边的id $url = 'http://www.rong123.com/cjbkscbsd/x_dfsdfs/24454_1_1.html'; function get ...

  6. asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码

    用 asp.net获取当前网页地址的一些信息. 设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http:// ...

  7. ASP.net获取当前url各种属性(文件名、参数、域名等)的方法

    假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.te ...

  8. ASP.net获取当前页面的文件名,参数,域名等方法

    ASP.net后台获取当前页面的文件名 System.IO.Path.GetFileName(Request.Path).ToString(); 获取当前页面文件名,参数,域名等方法 假设当前页完整地 ...

  9. C#中Uri类的解释

    URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是uniform resource locator,统一资源定位器,它是一种具体的UR ...

随机推荐

  1. A51汇编器的解释

    A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产 ...

  2. 《Programming WPF》翻译 第6章 4.应用程序全球化

    原文:<Programming WPF>翻译 第6章 4.应用程序全球化 如果你打算发布你的应用程序到全球各地,你可能需要为不同地区的用户界面准备不同的版本.至少,这需要解决将文本翻译成适 ...

  3. Linux文件夹执行权限

    在Linux中,文件有三种权限--可读,可写,可执行.目录也有三种权限--可读,可写,可执行.但是实际上他们有着不同的意义. 对于文件: 可读 :表示可以读取文件里的数据: 可写 :表示可以改变和删除 ...

  4. ctrl+alt+l:linux 锁屏 win+l:windows锁屏

    ctrl+alt+l:linux 锁屏, system->preferences->screensaver设置锁屏时间 win+l:windows锁屏

  5. 【转】一个从32位机器移植到64位机器时的c问题

    原文网址:http://www.jiancool.com/article/96402954887/ 最近工作中遇到了一个讨厌的问题,在32位机器上运行的好好的,但是在64位机器上,出现了诡异的 Seg ...

  6. Mysql 创建用户并对其赋予操作权限

    授权命令GRANT 语句的语法如下: GRANT privileges (columns) ON what TO user IDENTIFIEDBY "password" WITH ...

  7. [转]Hulu 2013北京地区校招笔试题

    填空题: 1.中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,逆序遍历结果为? 2.对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为 ...

  8. js 写table 函数

    //创建 table函数 function table(row,col,b,w) { document.write('<table border='+b+'>'); for(var i=0 ...

  9. Unity5 游戏小实例(方块男去打架吧)

    开发了将近半个月,最近进入一家游戏公司下班时间都是9点钟. 回到家里哪里还有时间去搞其他小东西, =.=这个小实例一直拖得太长了,先上一个版本.以后在慢慢修改.   项目下载地址: http://yu ...

  10. ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用)

    一.背景说明 通过调用GP服务,Android客户端也能实现专业的.复杂的GIS分析处理功能,从而增加应用的实用价值. ArcGIS Server发布的GP服务,分为同步和异步两种类型,一般执行步骤较 ...