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

发布于 2024-12-06 09:46:31 字数 659 浏览 0 评论 0原文

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

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

谢谢桑迪

If I have access to both a Uri and the UriTemplate on which is is based, what is the neatest way to discover the values that have replaced the parameters in the template?

For example, if I know:

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

is there a built-in way for me to discover that categoryName = "foo" and productName = "bar"?

I was hoping to find a method like:

        var parameterValues = uriTemplate.GetParameterValues(uri);

where parameterValues would be:

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

Clearly, I could write my own, but I was wondering if there was something in framework I could use.

Thanks

Sandy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把昨日还给我 2024-12-13 09:46:31

您可以在 上调用 Match 方法uriTemplate 实例并使用返回的 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

You can call the Match method on the uriTemplate instance and use the returned UriTemplateMatch instance to access the parameter values:

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]);
}

outputs

CATEGORYNAME: foo
PRODUCT-NAME: bar
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文