웹 API 컨트롤러에서 리소스 표현에 대한 링크를 추가하는 것은 정말 쉽습니다. 이런 식으로, 당신은 경로 이름을 사용하여 링크의 HREF를 구축 할 수 있습니다 (UrlHelper
클래스이다) 컨트롤러의 Url
속성을 사용 :ASP.NET 웹 API로 경로 기반 템플릿이 적용된 외부 참조 만들기
var href = Url.Link("RouteName", new { id = 123 });
href
의 값은 경로 구성을 기반으로 계산됩니다
- 같은이 경우 뭔가 http://example.org/api/products/123
. 이것은 hrefs가 생성되는 모든 장소를 업데이트하지 않고도 라우트 구성을 조정할 수 있기 때문에 좋습니다. 생성 된 모든 링크는 새 구성을 따릅니다.
그러나이 또는 다른 유사한 경로 기반 기술을 사용하여 템플릿을 hrefs로 만들 수 있습니까? 예를 들어, HAL의 templated
링크 속성을 사용하여 임의의 제품에 일부 자원에서 링크를 만들려면 :
"_links": {
"self": {
"href": "http://example.org/api/productfinder"
},
"product": {
"href": "http://example.org/api/products/{productId}",
"templated": true
}
}
(정말 자원을 호출 productfinder이없는 -이 질문에 대한 단지 인위적인 예를 들어).
템플릿의 문자열에 routeValues
매개 변수를 설정해 보았습니다. 예 :
var href = Url.Link("RouteName", new { id = "{productId}" });
이렇게하면 URL 인코딩 된 문자열 인 http://example.org/api/products/%7BproductId%7D
가 생성됩니다. .Replace
을 사용할 수 있지만이 방법은 다른 이유로 실패합니다. 경로 구성에 타입 제한이있는 경우. {id:int}
그러면 href가 null이됩니다.
routeValues
에 null을 전달하려고했는데 템플릿 부분을 추가 할 수 있기를 바랍니다. Link()
은 null을 반환하므로 href
은 템플릿 부분으로 끝납니다. 더하기이 같은 복잡한 경로에 대해서는 작동하지 않습니다. api/{this}/something/{that}{?q}
이렇게 붙어 있습니다. 경로를 사용하여 템플리트 화 된 외부 구조를 생성 할 수 있습니까? 그렇다면 어떻게?