Uri 类

提供统一资源标识符 (URI) 的对象表示形式和对 URI 各部分的轻松访问。

**命名空间:**System
**程序集:**System(在 system.dll 中)

语法

声明
<SerializableAttribute> _
Public Class Uri
    Implements ISerializable
用法
Dim instance As Uri
[SerializableAttribute] 
public class Uri : ISerializable
[SerializableAttribute] 
public ref class Uri : ISerializable
/** @attribute SerializableAttribute() */ 
public class Uri implements ISerializable
SerializableAttribute 
public class Uri implements ISerializable

备注

URI 是 Intranet 或 Internet 上可由应用程序使用的资源的一种简洁表示形式。Uri 类定义了属性和方法来处理 URI,包括分析、比较和组合。Uri 类属性是只读的;若要创建可修改的对象,请使用 UriBuilder 类。

相对 URI(例如“/new/index.htm”)必须相对于基 URI 展开,这样才是绝对的。提供了 MakeRelative 方法在必要时将绝对 URI 转换为相对 URI。

如果 URI 字符串是格式良好的 URI 并且包括方案标识符,Uri 构造函数将不会转义 URI 字符串。

Uri 属性用转义编码返回规范化数据表示形式,任何 Unicode 值大于 127 的字符都会被替换为等效的十六进制数。为使 URI 具有规范化格式,Uri 构造函数执行以下步骤:

  • 将 URI 方案转换为小写。

  • 将主机名转换为小写。

  • 如果主机名为 IPv6 地址,则使用规范化 IPv6 地址。ScopeId 和其他可选的 IPv6 数据将被移除。

  • 移除默认端口号和空端口号。

  • 通过压缩 /./、/../、// 等序列(包括转义表示形式),规范化分层 URI 的路径。

  • 对于分层 URI,如果主机未以正斜杠 (/) 结尾,则添加一个正斜杠。

  • URI 中的任何保留字符都要根据 RFC 2396 进行转义。

使用 ToString 方法,可以将 Uri 类的内容从转义编码的 URI 引用转换为可读的 URI 引用。请注意,在 ToString 方法的输出中,某些保留字符可能仍会被转义。这是为了支持利用 ToString 返回的值明确无误地重新构造 URI。

某些 URI 会包括一个片段标识符或一个查询,或同时包含这两项内容。片段标识符是跟在数字符号 (#) 之后的任意文本(不包括数字符号本身);段落文本储存在 Fragment 属性中。查询信息是 URI 中跟在问号 (?) 后的任何文本;查询文本存储在 Query 属性中。

在 .NET Framework 1.1 版中,如果指定给构造函数的字符串包含未知的方案和“c:\”,则 URI 类会在冒号后面插入“//”。例如,URI xyz:c:\abc 会转换为 xyz://c:/abc。在 .NET Framework 2.0 版中已经移除这一行为,示例字符串会转换为 xyz:c:/abc

提示

URI 类支持使用以下格式的 IP 地址:四组表示法的 IPv4 协议和冒号分隔的十六进制 IPv6 协议。请记住在 IPv6 地址两边括上方括号,如 http://[::1]。

性能注意事项

使用包含 URI 的 Web.config 文件来初始化应用程序时,如果 URI 的方案标识符是非标准的,则需要额外的时间来处理 URI。在这种情况下,请在需要 URI 的时候(而非启动时)初始化应用程序的受影响部分。

给调用者的说明 出于安全方面的考虑,如果您的应用程序接受来自不受信任来源的 Uri 实例并且 dontEscape 设置为 true,则使用时应谨慎。您可以通过调用 IsWellFormedOriginalString 方法来检查 URI 字符串是否有效。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明: .NET Compact Framework 不区分相对路径和绝对路径。同时,.NET Compact Framework 处理带 file:// 方案前缀的 URI 字符串的方式与功能齐全的 .NET Framework 不同。相对的 file://myfile 规范被解析为 \\myfile。使用 file:///myfile(三个斜杠)被解析为根目录中的 \myfile。为确保操作成功,请指定绝对路径信息。

示例

下面的示例创建 Uri 类的实例,并用它来创建 WebRequest 实例。

Dim siteUri As New Uri("https://www.contoso.com/")
        
Dim wr As WebRequest = WebRequest.Create(siteUri)
Uri siteUri = new Uri("https://www.contoso.com/");
 
WebRequest wr = WebRequest.Create(siteUri);
Uri^ siteUri = gcnew Uri( "https://www.contoso.com/" );
WebRequest^ wr = WebRequest::Create( siteUri );
Uri siteUri = new Uri("https://www.contoso.com/");
WebRequest wr = WebRequest.Create(siteUri);
var siteUri : Uri = new Uri("https://www.contoso.com/");
var wr : WebRequest = WebRequest.Create(siteUri);

继承层次结构

System.Object
  System.Uri

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

Uri 成员
System 命名空间
UriBuilder