【问题标题】:Given a Uri and a UriTemplate, how to get template parameter values?给定一个 Uri 和一个 UriTemplate,如何获取模板参数值?
【发布时间】:2011-09-25 14:12:47
【问题描述】:

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

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

谢谢

桑迪

【问题讨论】:

    标签: c# uri


    【解决方案1】:

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

    【讨论】:

    • 请注意,似乎存在一个错误,您的模板参数在 Match 返回的 NameValueCollection 中大写,因此,UriTemplate 和匹配集合中的字符串名称(键的)不会'不匹配。
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多