System.UriTemplate 类

方法描述

一个表示统一资源标识符 (URI) 模板的类。

语法定义(C# System.UriTemplate 类 的用法)

public class UriTemplate

构造函数

构造函数名称 构造函数描述
UriTemplate(String) 使用指定的模板字符串初始化 UriTemplate 类的新实例。
UriTemplate(String, Boolean) 初始化 UriTemplate 类的新实例。
UriTemplate(String, IDictionary) 初始化 UriTemplate 类的新实例。
UriTemplate(String, Boolean, IDictionary) 初始化 UriTemplate 类的新实例。

成员/方法

方法名称 方法描述
BindByName(Uri, IDictionary) 利用模板和参数集合创建一个新的 URI。
BindByName(Uri, NameValueCollection) 利用模板和参数集合创建一个新的 URI。
BindByName(Uri, IDictionary, Boolean) 利用模板和参数集合创建一个新的 URI。
BindByName(Uri, NameValueCollection, Boolean) 利用模板和参数集合创建一个新的 URI。
BindByPosition 利用模板和参数值数组创建一个新的 URI。
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
IsEquivalentTo 指示 UriTemplate 与其他模板的结构是否等效。
Match 尝试将 URI 与 UriTemplate 匹配。
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ToString 返回 UriTemplate 实例的字符串表示形式。 (重写 Object.ToString()。)

提示和注释

使用 URI 模板,可以定义一组结构相似的 URI。模板由两部分组成,即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值(书写在大括号 [{ }] 内,且被限制为仅与一个段的内容匹配)或必须出现在路径末端的通配符(书写为星号 [*],与“路径的其余部分”匹配)。查询表达式可以完全省略。如果出现表达式,则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2),也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串:

"weather/WA/Seattle"

"weather/{state}/{city}"

"weather/*"

"weather/{state}/{city}?forecast=today

"weather/{state}/{city}?forecast={day}

前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量,其他都是文本。您可以使用实际的值替换变量,将 UriTemplate 实例转换成 Uri。例如,使用模板“weather/{state}/{city}”,在变量“{state}”和“{city}”中输入值,便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, String[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。

System.UriTemplate 类例子

下面的代码演示如何创建 UriTemplate 实例,并将其绑定和匹配到候选 URI。

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

Console.WriteLine("PathSegmentVariableNames:");
foreach (string name in template.PathSegmentVariableNames)
{
    Console.WriteLine("     {0}", name);
}
Console.WriteLine();

Console.WriteLine("QueryValueVariableNames:");
foreach (string name in template.QueryValueVariableNames)
{
    Console.WriteLine("     {0}", name);
}
Console.WriteLine();

Uri positionalUri = template.BindByPosition(prefix, "Washington", "Redmond", "Today");

NameValueCollection parameters = new NameValueCollection();
parameters.Add("state", "Washington");
parameters.Add("city", "Redmond");
parameters.Add("day", "Today");
Uri namedUri = template.BindByName(prefix, parameters);

Uri fullUri = new Uri("http://localhost/weather/Washington/Redmond?forecast=today");
UriTemplateMatch results = template.Match(prefix, fullUri);

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

if (results != null)
{
    foreach (string variableName in results.BoundVariables.Keys)
    {
        Console.WriteLine("   {0}: {1}", variableName, results.BoundVariables[variableName]);
    }
}

继承层次结构

System.Object

System.UriTemplate

命名空间

namespace: System

程序集: System.ServiceModel(在 System.ServiceModel.dll 中)

线程安全

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

版本信息

.NET Framework 受以下版本支持:4、3.5 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。

相关资源

System 命名空间
MSDN