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

本文关键字:一个 获取 参数 何获取 UriTemplate Uri | 更新日期: 2023-09-27 18:09:40

如果我可以访问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" }}

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

感谢桑迪

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

您可以在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