给定一个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
完善!非常感谢。 – sandy
请注意,似乎存在一个错误,其中由Match返回的NameValueCollection中的模板参数大写,因此UriTemplate中的字符串名称和匹配集合中的字符串名称不匹配。 – nicodemus13