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

时间:2011-09-25 14:12:47

标签: c# uri

如果我可以同时访问Uri和UriTemplate,那么发现替换模板中参数的值的最佳方法是什么?

例如,如果我知道:

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

有没有内置的方式让我发现categoryName =“foo”和productName =“bar”?

我希望找到一种方法:

        var parameterValues = uriTemplate.GetParameterValues(uri);

其中parameterValues为:

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

显然,我可以写自己的,但我想知道框架中是否有可以使用的东西。

由于

1 个答案:

答案 0 :(得分: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