2011-09-25 3 views
4

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"); 

나 그 categoryName이 = "foo는"및 제품 이름 = "줄을"발견을위한 기본 방법이?

내가 같은 방법을 찾으려했다 : 나는 내 자신을 작성할 수 있습니다, 분명히

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

하지만 프레임 워크에 뭔가가 있다면 궁금 해서요 : parameterValues이 될 것

 var parameterValues = uriTemplate.GetParameterValues(uri); 

을 나는 쓸 수 있었다.

감사

샌디

답변

3

당신은 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 
+0

완전한! 매우 감사합니다. – sandy

+0

템플릿 매개 변수가 Match에 의해 반환 된 NameValueCollection에 대문자로 나타나는 버그가있는 것 같습니다. 따라서 UriTemplate의 문자열 이름과 일치하는 항목이 일치하지 않습니다. – nicodemus13

관련 문제