Un modèle URI vous permet de définir un ensemble d'URI structurellement semblables. Les modèles sont composés de deux parties : un chemin d'accès et une requête. Un chemin d'accès est constitué d'une série de segments délimités par une barre oblique (/). Chaque segment peut avoir une valeur littérale, une valeur variable (écrite entre accolades [{}], avec obligation de correspondre au contenu exact d'un segment) ou un caractère générique (un astérisque [*] qui correspond au reste du chemin d'accès). L'expression de requête peut être entièrement omise. Si elle est présente, elle spécifie une série non triée de paires nom/valeur. Les éléments de l'expression de requête peuvent être des paires littérales (? x=2) ou des paires variables (? x = {val}). Les valeurs non couplées ne sont pas autorisées. Les exemples suivants présentent des chaînes de modèle valides :
Les modèles URI précédents peuvent servir à l'organisation de bulletins météorologiques. Les segments placés entre accolades sont des variables ; tout le reste désigne un littéral. Vous pouvez convertir une instance UriTemplate en un type Uri en remplaçant des variables par des valeurs réelles. Par exemple, prenez le modèle "météo/{état}/{ville}" et insérez des valeurs pour les variables "{état}" et "{ville}". Vous obtenez "météo/WA/Seattle". Vous pouvez évaluer si un URI candidat donné correspond à un modèle URI donné en appelant la méthode Match(Uri, Uri). Vous pouvez également utiliser des instances UriTemplate pour créer un type Uri à partir d'un ensemble de valeurs de variables en appelant la méthode BindByName(Uri, NameValueCollection) ou BindByPosition(Uri, array<String>[]()[]).