Учитывая Uri и UriTemplate, как получить значения параметров шаблона? - PullRequest
4 голосов
/ 25 сентября 2011

Если у меня есть доступ как к 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);

где параметрValues ​​будет:

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

Я мог бы написать свой, но мне было интересно, есть ли что-то в фреймворке, которое я мог бы использовать.Спасибо

Сэнди

1 Ответ

3 голосов
/ 25 сентября 2011

Вы можете вызвать метод 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]);
}

output

CATEGORYNAME: foo
PRODUCT-NAME: bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...