导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Uri 类

2013/12/13

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

Namespace:  System
程序集:  System(位于 System.dll 中)

[TypeConverterAttribute(typeof(UriTypeConverter))]
public class Uri

Uri 类型公开以下成员。

  名称说明
公共方法Uri(String)用指定的 URI 初始化 Uri 类的新实例。
公共方法Uri(String, UriKind)用指定的 URI 初始化 Uri 类的新实例。此构造函数允许您指定 URI 字符串是相对 URI、绝对 URI 还是不确定。
公共方法Uri(Uri, String)根据指定的基 URI 和相对 URI 字符串,初始化 Uri 类的新实例。
公共方法Uri(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获取用问号 (?) 分隔的 AbsolutePathQuery 属性。
公共属性Port获取此 URI 的端口号。
公共属性Query获取指定 URI 中包括的任何查询信息。
公共属性Scheme获取此 URI 的方案名称。
公共属性Segments获取包含构成指定 URI 的路径段的数组。
公共属性UserEscaped指示 URI 字符串在创建 Uri 实例之前已被完全转义。
公共属性UserInfo获取用户名、密码或其他与指定 URI 关联的特定于用户的信息。
返回顶部

  名称说明
公共方法静态成员CheckHostName确定指定的主机名是否为有效的 DNS 名称。
公共方法静态成员CheckSchemeName确定指定的方案名是否有效。
公共方法静态成员Compare使用指定的比较规则比较两个 URI 的指定部分。
公共方法Equals比较两个 Uri 实例是否相等。 (重写 Object.Equals(Object)。)
公共方法静态成员EscapeDataString将字符串转换为它的转义表示形式。
公共方法静态成员EscapeUriString将 URI 字符串转换为它的转义表示形式。
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法静态成员FromHex获取十六进制数字的十进制值。
公共方法GetComponents使用特殊字符的指定转义,获取当前实例的指定部分。
公共方法GetHashCode获取 URI 的哈希代码。 (重写 Object.GetHashCode()。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法IsBaseOf确定当前的 Uri 实例是否为指定 Uri 实例的基。
公共方法静态成员IsHexDigit确定指定的字符是否为有效的十六进制数字。
公共方法IsWellFormedOriginalString指示用于构造此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义。
公共方法静态成员IsWellFormedUriString通过尝试用字符串构造一个 Uri 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义。
公共方法MakeRelativeUri确定两个 Uri 实例之间的差异。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ToString获取指定的 Uri 实例的规范化字符串表示形式。 (重写 Object.ToString()。)
公共方法静态成员TryCreate(String, UriKind, Uri)使用指定的 String 实例和 UriKind 创建一个新的 Uri
公共方法静态成员TryCreate(Uri, String, Uri)使用指定的基和相对 Uri 实例创建一个新的 String
公共方法静态成员TryCreate(Uri, Uri, Uri)使用指定的基和相对 Uri 实例创建一个新的 Uri
公共方法静态成员UnescapeDataString将字符串转换为它的非转义表示形式。
返回顶部

  名称说明
公共运算符静态成员Equality确定两个 Uri 实例是否具有相同的值。
公共运算符静态成员Inequality确定两个 Uri 实例是否具有不同的值。
返回顶部

  名称说明
公共字段静态成员SchemeDelimiter指定将通讯协议方案同 URI 的地址部分分开的字符。此字段为只读。
公共字段静态成员UriSchemeFile指定 URI 是指向文件的指针。此字段为只读。
公共字段静态成员UriSchemeFtp指定通过文件传输协议 (FTP) 访问 URI。此字段为只读。
公共字段静态成员UriSchemeGopher指定通过 Gopher 协议访问 URI。此字段为只读。
公共字段静态成员UriSchemeHttp指定通过超文本传输协议 (HTTP) 访问 URI。此字段为只读。
公共字段静态成员UriSchemeHttps指定通过安全超文本传输协议 (HTTPS) 访问 URI。此字段为只读。
公共字段静态成员UriSchemeMailto指定 URI 是一个电子邮件地址,需通过简单邮件传输协议 (SMTP) 访问。此字段为只读。
公共字段静态成员UriSchemeNetPipe指定通过“Indigo”系统的 NetPipe 方案访问此 URI。此字段为只读。
公共字段静态成员UriSchemeNetTcp指定通过“Indigo”系统的 NetTcp 方案访问此 URI。此字段为只读。
公共字段静态成员UriSchemeNews指定 URI 是 Internet 新闻组,可以通过 Network 新闻传输协议 (NNTP) 访问。此字段为只读。
公共字段静态成员UriSchemeNntp指定 URI 是 Internet 新闻组,可以通过 Network 新闻传输协议 (NNTP) 进行访问。此字段为只读。
返回顶部

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

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

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

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

  • 将 URI 方案转换为小写。

  • 将主机名转换为小写。

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

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

  • 通过压缩 /./、/../、// 等序列(包括转义表示形式),规范化分层 URI 的路径。请注意,在某些方案中,不压缩转义表示形式。

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

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

在某些方案的构造函数中,作为规范化工作的一部分,将压缩转义表示形式。其 URI 将压缩转义序列的方案包括:file、http、https、net.pipe 和 net.tcp。对于其他所有方案,不压缩转义序列。例如:如果您将两个点“..”编码为百分号形式的“%2E%2E”,则对于某些方案,URI 构造函数将压缩此序列。例如,下面的代码示例演示 http 方案的 URI 构造函数。


    Uri uri = new Uri("http://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.Query);

当这段代码执行时,将返回下面的输出,其中对转义序列进行了压缩。


http://myUrl/
/

下面的代码示例演示 ftp 方案的 URI 构造函数:


    Uri uri = new Uri("ftp://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.Query);

当这段代码执行时,将返回下面的输出,其中未对转义序列进行压缩。


ftp://myUrl/%2E%2E/%2E%2E
/%2E%2E/%2E%2E

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

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

说明注意:

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

Uri 的构造函数允许应用程序为 Scheme 属性中描述的许多方案创建 Uri 实例。但是,只有 UriSchemeHttpUriSchemeHttps 方案的 Uri 实例才受 System.Net 命名空间中 WebClient 和 HTTP 类的支持。

不支持国际资源标识符

Web 地址通常使用统一资源标识符表示,该标识符由一组严格限制的字符组成:

  • 英语字母表中的大写和小写 ASCII 字母。

  • 数字 0 到 9。

  • 少量其他 ASCII 符号。

Internet 工程任务组 (IETF) 发布的 RFC 2396 和 RFC 3986 中说明了 URI 规范。

随着 Internet 的发展,越来越需要使用除英语以外的其他语言来标识资源。能够满足这一需要并允许使用非 ASCII 字符(Unicode/ISO 10646 字符集中的字符)的标识符称为国际资源标识符 (IRI)。IETF 发布的 RFC 3987 中对 IRI 规范进行了说明。使用 IRI 可以在 URL 中包含 Unicode 字符。

Windows Phone 中的现有 Uri 类当前不支持 IRI 或应用于域名的国际化域名 (IDN) 分析。

Windows Phone 应用程序不能从 Uri 类中派生新类。

性能注意事项

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

对调用者的说明

出于安全方面的考虑,如果您的应用程序接受来自不受信任来源的 Uri 实例并且 dontEscape 设置为 true,则使用时应谨慎。

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


Uri siteUri = new Uri("http://www.contoso.com/");

WebRequest wr = WebRequest.Create(siteUri);


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示:
© 2014 Microsoft