C#System.Uri类_获取Url的各种属性_⽂件名_参数_域名_端⼝等等 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("www.baidu:80/2013/123.html?id=1");
Console.WriteLine(uri.AbsolutePath);    //输出 /2013/123.html
Console.WriteLine(uri.AbsoluteUri);    //输出 www.baidu/2013/123.html?id=1
Console.WriteLine(uri.Authority);      //输出 www.baidu
Console.WriteLine(uri.DnsSafeHost);    //输出 www.baidu
Console.WriteLine(uri.Fragment);        //输出
Console.WriteLine(uri.Host);            //输出 www.baidu
Console.WriteLine(uri.IsAbsoluteUri);  //输出 True
Console.WriteLine(uri.IsDefaultPort);  //输出 True
Console.WriteLine(uri.IsFile);          //输出 False
Uri uri1 = new Uri(@"D:\");
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);  //输出 www.baidu: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
}16进制字符串转16进制数组
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("www.baidu:80/2013/123.html?id=1");
UriHostNameType unt = Uri.CheckHostName("www.baidu");
Console.WriteLine(unt.ToString());  //输出Unknown    UriHostNameType 是⼀个枚举,定义主机名类型
Console.WriteLine(Uri.CheckSchemeName("www.baidu")); //输出 False
Console.WriteLine(Uri.CheckSchemeName("http"));    //输出 True
Console.WriteLine(Uri.CheckSchemeName("https"));    //输出 True
//Uri uri1 = new Uri("www.baidu");
//Uri.Compare(uri,uri1);
//Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中⽂、井号(#)都进⾏了编码,可对参数编码
Console.WriteLine(Uri.EscapeDataString("www.baidu:80/2013/123.html?id=1"));  //输出 http%3A%2F%2Fwww.baidu%3A80%2F2013%2F123.html%3Fid%3D1    Uri转义            //Uri.EscapeUriString对空格进⾏了编码,也对中⽂进⾏了编码,但对冒号(:)、斜杠(/)和井号(#)未编码,所以此⽅法可以⽤于⽹址进⾏编码,但不能对参数进⾏编码
//Uri.EscapeUriString对URI的⽹址部分编码,⽤Uri.EscapeDataString对URI中传递的参数进⾏编码。
Console.WriteLine(Uri.EscapeUriString("www.baidu:80/2013/123.html?id=1&你好"));//输出 www.baidu:80/2013/123.html?id=1&%E4%BD%A0%E5%A5%BD
string str = "http%3A%2F%2Fwww.baidu%3A80%2F2013%2F123.html%3Fid%3D1";
Console.WriteLine(Uri.UnescapeDataString(str)); //输出 www.baidu: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));  //输出
Uri uri1 = new Uri("Http://www.baidu");
Console.WriteLine(uri.IsBaseOf(uri1));  //输出 False
Console.WriteLine(uri1.IsBaseOf(uri));  //输出 True
//TryCreate也可⽤于相对路径转绝对路径,返回⼀个新的uri并且不成功时不报异常
Uri uri2 = new Uri("www.baidu/a/b/c.html");
Uri uri3;
Uri.TryCreate(uri2,"../123.html",out uri3);
Console.WriteLine(uri3);    //输出 www.baidu/a/123.html
Uri uri4 = uri2.MakeRelativeUri(uri3);
Console.WriteLine(uri4);    //输出..123/html
//再来⼀个
Uri uri5 = new Uri("www.baidu/a/b/d.html");
Uri uri6 = new Uri("www.baidu/a/b/c.html");
Uri uri7 = uri5.MakeRelativeUri(uri6);
Console.WriteLine(uri7);    //输出 c.html //这样就表⽰⽬录相同,⽂件名不同,相对于第⼀个调⽤Uri来说的
//确定⽂件是否不需要转义,没特殊字符就不需要转移
//以下两个⽅法基本⼀致,只是⼀个是静态⽅法,⼀个是实例⽅法⽽已
Console.WriteLine(Uri.IsWellFormedUriString("www.baidu", UriKind.Absolute));            //输出 True UriKind是⼀个枚举
Console.WriteLine(Uri.IsWellFormedUriString("www.baidu/123.html?名字=张三", UriKind.Ab
solute));    //输出 False    表⽰需要转义
Console.WriteLine(uri.IsWellFormedOriginalString());   //True 此 Uri 的字符串是否格式良好,以及它是否不需要进⼀步转义。
Uri uri8 = new Uri("www.baidu/123.html?名字=张三");
Console.WriteLine(uri8.IsWellFormedOriginalString());  //输出False
Console.ReadKey();
}
}
  有时间要看好点,这个类还是很有⽤的。
  另附上⼀个常⽤的功能,相对Uri转绝对Uri,这是是利⽤构造函数实现的,传⼊⼀个baseUri就能够实现,如如下代码:
static void Main(string[] args)
{
Uri uri = new Uri("www.jmeii/a/b/index.html");
Uri uri2 = new Uri(uri,"../123.html");
Console.WriteLine(uri2.ToString());    //输出www.jmeii/a/123.html
Console.ReadKey();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。