如果我可以同时访问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" }}
显然,我可以写自己的,但我想知道框架中是否有可以使用的东西。
由于
距
答案 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