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小时内删除。
发表评论