Windows apps
Collapse the table of content
Expand the table of content
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

UriTemplateTable Class

A class that represents an associative set of UriTemplate objects.

Namespace:  System
Assembly:  System.ServiceModel.Web (in System.ServiceModel.Web.dll)

public class UriTemplateTable

A UriTemplateTable is an associative set of UriTemplate objects bound to an object of the developer's choosing. It allows you to match candidate Uniform Resource Identifiers (URIs) against the templates in the set and retrieve the data associated with the matching templates. The contents of UriTemplateTable can be changed until the MakeReadOnly(Boolean) method is called, at which time one of following types of validation occurs:

  • When MakeReadOnly(Boolean) is called passing in false, the UriTemplateTable checks to make sure the table contains no multiple structurally-equivalent templates. If it finds such templates, it throws an exception. This type of validation is used in conjunction with MatchSingle(Uri) when you want to ensure only one template matches an incoming URI.

  • When MakeReadOnly(Boolean) is called passing in true, multiple structurally-equivalent templates can be contained within a UriTemplateTable. However, any query strings in the templates must not be ambiguous; identical query strings are allowed. For more information about ambiguous query strings, see UriTemplate and UriTemplateTable.

The following code shows how to create a UriTemplateTable, populate it, and use it to match against a candidate Uri.

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

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

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
    // BaseUri
    Console.WriteLine("BaseUri: {0}", results.BaseUri);

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

    foreach (string queryName in results.QueryParameters.Keys)
        Console.WriteLine("    {0} : {1}", queryName, results.QueryParameters[queryName]);

    foreach (string segment in results.RelativePathSegments)
        Console.WriteLine("     {0}", segment);



    foreach (string segment in results.WildcardPathSegments)
        Console.WriteLine("     {0}", segment);


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5
© 2018 Microsoft