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# uri 取文件名_C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等相关推荐

  1. java获取properties属性_java工具类中获取properties文件的属性

    记录获取properties文件属性的工具类 package org.jasig.cas.mylogin.util; import org.slf4j.Logger; import org.slf4j ...

  2. 利用System.Uri转URL为绝对地址

    在使用ASPOSE.Word生成Word文档时可以通过InsertHtml(html)来将图文信息写入Word文档(图片内嵌),但要求html里图片的src是绝对全路径,所以需要对html进行转化. ...

  3. java uri 是什么_java的URI和URL到底是什么

    在我们做开发时,经常有URI和URL弄混的问题,如果当时直接看URI和URL的源码就不可能弄混.首先我总结一下URI和URL的关系:他们的关系是:URL是一种特殊的URI,是URI包括URL, 下面用 ...

  4. URI是什么意思?URI和URL有什么区别?

    URI是什么意思?URI和URL有什么区别? 详解! HTTP = Hyper Text Transfer Protocol URI = Universal Resource Identifier U ...

  5. System.Type类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. 反射,System.Type类

    http://m.blog.csdn.net/blog/woddle/40623333 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做 ...

  7. (117)System Verilog类继承详解

    (117)System Verilog类继承详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类继承详解 5)结语 1.2 FPGA ...

  8. (116)System Verilog类合成(类包含关系)详解

    (116)System Verilog类合成(类包含关系)详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类合成(类包含关系)详解 ...

  9. (106)System Verilog类中变量双向约束关系

    (106)System Verilog类中变量双向约束关系 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类中变量双向约束关系 5)结 ...

最新文章

  1. R语言保存加载工作空间或者工作空间数据对象实战(Save Load RData Workspace)
  2. Android 代码设置调试等待
  3. AngularJS基础01 从HelloWorld说起
  4. python有多少库存_库存究竟多少才算合理?
  5. 【计算机网络复习 数据链路层】3.6.5 PPP、HDLC
  6. 动手学深度学习Pytorch Task08
  7. openstack nova调用libvirt,跟踪libvirt源码实例详解(cpu_mode及live_migrate 错误解决)...
  8. Vue:vue过渡、动画特效以及借助animate.css实现动画效果
  9. Vue开发实例(03)之Vue项目引入element_ui
  10. Java 去除字符串中的空白字符
  11. 电脑重置后需要清除tpm吗
  12. iOS转前端之如何适配不同屏幕尺寸方案
  13. 计算机视觉基础-1——直观简介
  14. 数据挖掘——正规方程拟合直线
  15. Python爬虫抓取网页图片
  16. 2020语数英小学初中课程百度云学而思Python笔记
  17. 打造不死的asp木马
  18. 视觉和Lidar里程计
  19. PHP文件在线加密源码
  20. 关于生意参谋数据采集分析人员,我们的采集程序是否可以使用另一种方式,更不用大改之前所写的代码

热门文章

  1. 【CSDN 2020年度征文】江湖路远,不说再见,不负韶光
  2. macOS - afconvert 命令(音频格式转换)
  3. 老菜鸟趣谈:对编程初学者的一些建议
  4. VC/MFC 从WebBrower 中获取 HTML 和文本
  5. 行业资讯 | 深圳:BIM法定化,开历史之先河
  6. 自动备份android,Android自动备份错误
  7. python区域找图_使用Imagemagick查找相似区域
  8. 以太坊性能优化:分片技术、雷电网络、Casper-下一代以太坊共识协议
  9. 联想服务器控制口登录地址_服务器常见远程管理网口及登录方式
  10. echarts添加基准线