一、URI
URI为统一资源标识符Uniform Resource Identifier的简称,代表网络上的某个特定网站或是网络服务,如FTP、新闻组等:
Protocol://hostname:portnumber/path/filenameProtocol表示所使用的网络协议,如http、ftp等
hostname为提供网络资源的特定服务器主机名,代表一个特定网站的名称,或是主机本身的IP地址, 如http://www.163.com,http://10.195.194.34等
portnumber端口号
path为文件所存放的文件夹路径名称
filename则为文件的名称。
二、URI类
Uri类通过接收代表URI字符串的表达式,建立一个封装特定URI的实体对象。
它提供相关属性或方法成员,可以针对URI的各个组成部分进行拆解,进行细部的操作。
1、定义
URI是个实体类,定义有两个方式。
Dim myUri As New Uri( “http://www.163.com” )参数若不是合法URI,将引异常。
Public Sub New( ByVal baseUri As Uri,ByVal relativeUri As String)baseUri 基底URI,包含完整的通信协议名称及网域主机名,甚至包含特定的路径表示字符串;
relativeUri相对路径
例:http://6.scdx3.crsky.com/soft/201604/kugou-v8.0.46.zip
http://6.scdx3.crsky.com 可以是baseURI,
http://6.scdx3.crsky.com/soft/201604 也可以是baseURI
soft/201604/kugou-v8.0.46.zip 是相对路径URI
当baseURI与relativeURI合并成为一个完整URI时,其中相互重叠的部分被舍弃。
Uri类提供几个关于解析URI路径的相关属性成员及方法,如:
AbsoluteUri用以取得完整的URI名称,包含域名及完整的文件路径。
AbsolutePath则返回URI定义当中的path及FileName合并字符 串。
Public Class Form1 Private Sub btnURI_Click(sender As Object,e As EventArgs) Handles btnURI.Click Dim u1 As New Uri(txtBase.Text) Dim u2 As New Uri(u1,txtRelative.Text) txtPractice.Text = "u2的绝对URI: " & u2.AbsoluteUri & vbCrLf & "u2的绝对URIPath:" & u2.AbsolutePath & vbCrLf & "u1的绝对URI: " & u1.AbsoluteUri & vbCrLf & "u1的绝对URIPath:" & u1.AbsolutePath End Sub End Class
2、Uri类的属性成员
实例:http://6.scdx3.crsky.com/soft/201604/kugou-v8.0.46.zip,每个属性的结果在对应后面。
AbsolutePath URl的绝对路径,/soft/201604/kugou-v8.0.46.zip
AbsoluteUri 绝对URI,http://6.scdx3.crsky.com/soft/201604/kugou-v8.0.46.zip
Authority 服务器的域名系统(DNS)主机名或IP地址,以及端口编号,6.scdx3.crsky.com
DnsSafeHost 可安全使用于DNS解析的未转义主机名,6.scdx3.crsky.com
Fragment 转义URI的片段
Host 主机部分,6.scdx3.crsky.com
HostNameType 传回URI中指定的主机名的类,2(即http)
IsAbsoluteUri Uri实例是否为绝对的,True
IsDefaultPort URI的端口数值是否为这个配置的默认值,True
IsFile Uri是否为文件URI,False
Is Loopback Uri是否参考本端主机,False
IsUnc Uri是否为通用命名约定(Universal Naming Convention,UNC)路径,False
LocalPath 文件名的本机換作系统表示,/soft/201604/kugou-v8.0.46.zip
OriginalString 传递给Uri表达函数的原始UR1字符,http://6.scdx3.crsky.com/soft/201604/kugou-v8.0.46.zip
PathAndQucry 以问号(?)分URI的AbsolutePath和Query域性,/soft/201604/kugou-v8.0.46.zip
Port uri的端口编号,80
Query URI所包含的任何査询信息,””(为空)
Scheme URI的配置名称,http
Segments 数组,包含构成指定UR1的路径区段,结果详见下面
UserEscaped URI字符串是在Uri实例建立之前已完全转义,False
Userlnfo 与指定URI关联的用户名称.密码或其他用户特定的信息,””(为空)
说明:
(1)HostNameType主机名的类
Public Readonly Property HostNameType As UriHostNameType
返回值是一个UriHostNameType列举类型,项目如下:
Basic 主机已设置但无法判断类型
Dns 主机名为域名系统(DNS)类型主机名
IPv4 主机名是因特网通倍协议(〖P) 4版主机地址
IPv6 主机名是因特网通信协议(IP) 6版主机地址
Unknown 无法提供主机名类型
一般用Uri.CheckHostName(String)来检测,返回UriHostNameType.Basic…等,对应的值为0,1,2…
(2) Scheme URI配置的名称,如ftp、http等,情况如下:
File 资源是本机计算机上的文件
ftp 通过FTP存取资源
Gopher 通过Gopher通信协议存取资源
http 通过HTTP存取资源
https 通过SSL加密的HTTP来存取资源
mailto 资源是电子邮件地址,并通过SMTP存取
nntp 通过NNTP存取资源
(3) Segments URI绝对路径的“区段”字符串所构成的数组对象
“区段”是从第一个字符直到斜线“/”或路径结尾的部分,视为第一个区段,然后每个额外区段都是自上一个区段后的第一个字符开始,并以下一个斜线或路径结尾结束。
例:http://6.scdx3.crsky.com/soft/201604/kugou-v8.0.46.zip
Segments.Count:4
Segments(0):/
Segments(1): soft/
Segments(2): 201604/
Segments(3): kugou-v8.0.46.zip
例:绝对 URI: http://www.contoso.com/Chapters/Chapter1/Sections/Section1.htm
绝对路径: /Chapters/Chapter1/Sections/Section1.htm
段: /Chapters/Chapter1/Sections/Section1.htm
绝对 URI: http://www.contoso.com/Chapters/Chapter1/Sections/Section1.htm#page1?answer=NO
绝对路径: /Chapters/Chapter1/Sections/Section1.htm
段: /Chapters/Chapter1/Sections/Section1.htm
请注意,由于绝对路径以“/”开始,因此第一个段就是这个斜杠而不包括其他内容。
(4)Query 返回URI中任何査询字符串
即问号“?”后方所连接的所有条件值,
例:http://www.silukee.com/SearchBook.aspx?keyword=23&t=1
Query: keyword=23&t=1
二、UriBuilder 类
Uri类对象一旦建立之后,就无法修改其URI值,uriBuilder类提供用以调整URI的Uri类版本,可视为一种动态的Uri。
建立UriBuilder对象(两种)
1、由各部分来新建
UriBuilder类提供比Uri更为弹性的表达式,其中包含分开指定通信及路径信息的参数版本:
Public Sub New( ByVal scheme As String,ByVal host As String,ByVal port As Integer,ByVal pathValue As String)scheme代表URI协议;
host则是主机名;
port为连接的通信端口;
pathValue 则是URI的路径名称。
例:New URIBuilder(“http”,” news.163.com”,”80”,” 16/0507/09/BMF28H8200011229.html”)
2、由存在的URI新建
除了指定URI的个别部分,另外一个版本定义的表达式接收已建立完成的Uri类对象,建立新的UriBuilder对象:
Public Sub New( ByVal uri As Uri )UriBuilder与Uri类区别,UriBuilder提供的属性值同时具有“读/写”权限; 通过调整属性值,达到修正URI内容的目的。 UriBuilder另外提供一个Uri属性,这个属性返回UriBuilder类对象所建立的Uri类实体。