2011-09-25 31 views
4

如果我可以訪問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" }} 

很顯然,我可以寫我自己,但我不知道是否有東西在框架我可以使用。

感謝

桑迪

回答

3

可以呼籲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

相關問題