给定一个Uri和一个UriTemplate,如何获取模板参数值?

问题描述:

如果我可以访问Uri和UriTemplate,那么发现已替换模板中参数的值的最新方法是什么?给定一个Uri和一个UriTemplate,如何获取模板参数值?

例如,如果我知道:

 var uriTemplate = new UriTemplate("/product-catalogue/categories/{categoryName}/products/{product-name}"); 
     var uri = new Uri("/product-catalogue/categories/foo/products/bar"); 

有一个内置的办法,我发现,类别名称=“foo”和产品名称=“巴”?

我希望能找到喜欢的方法:

 var parameterValues = uriTemplate.GetParameterValues(uri); 

其中的parameterValues是:

  { { "categoryName", "foo" }, { "productName", "bar" }} 

很显然,我可以写我自己,但我不知道是否有东西在框架我可以使用。

感谢

桑迪

可以呼吁uriTemplate实例Match方法和使用返回UriTemplateMatch实例来访问参数值:

var uriTemplate = new UriTemplate("/product-catalogue/categories/{categoryName}/products/{product-name}"); 
var uri = new Uri("http://www.localhost/product-catalogue/categories/foo/products/bar"); 
var baseUri = new Uri("http://www.localhost"); 

var match = uriTemplate.Match(baseUri, uri); 

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

输出

CATEGORYNAME: foo 
PRODUCT-NAME: bar 
+0

完善!非常感谢。 – sandy

+0

请注意,似乎存在一个错误,其中由Match返回的NameValueCollection中的模板参数大写,因此UriTemplate中的字符串名称和匹配集合中的字符串名称不匹配。 – nicodemus13