2013-10-03 2 views
2

콘솔 응용 프로그램에서 Umbraco와 함께 작업합니다. 어떤 노드에 대해 NiceUrl을 얻으려고하면 UmbracoContext.Current이 null이므로 불가능합니다.움 브라 코. 콘솔 응용 프로그램에서 노드의 URL 가져 오기

"-1,1067,1080"과 같은 ID로 노드 경로를 얻을 수 있지만 URL 형식으로 변환하는 방법을 알지 못합니다.

어떻게 노드 응용 프로그램 콘솔에서 NiceUrl을 얻을 수 있습니까?

난 다음 한 : 를 내 콘솔 응용 프로그램에서이 같은 단순 ID로 노드를 얻을 :

string url = someNode.NiceUrl; 

이 경우 ArgumentNullException을 얻을 :

Node someNode = new Node(nodeId); 

내가 NiceUrl을 해보

.

나는 다음 이유를 확인했습니다 : NiceUrl은 UmbracoContext를 사용하므로 null이기 때문에 불가능합니다.

또한 나는 이것을 사용할 수 없습니다 UmbracoContext.Current.ContentCache.GetById(someidhere).Url

감사합니다.

+0

당신은 당신이 시도 무엇의 예를 게시 할 수 있습니까? – TimWagaman

+0

@TimWagaman 메인 포스트를 편집했습니다. –

답변

0

예, 동일한 문맥에 액세스하고 있으므로 UmbracoContext.Current.ContentCache을 사용할 수 없습니다.

v6 +를 사용하는 것처럼 보입니다. 대신 Umbraco에서 제공하는 API 서비스, 특히 ContentService를 사용해야합니다. http://our.umbraco.org/forum/developers/api-questions/37981-Using-v6-API-ContentService-in-external-application

그리고 여기 솔루션의 예 : https://github.com/sitereactor/umbraco-console-example

+1

이것이 답변으로 주어지는 방법을 잘 모르겠습니다. 두 링크가 도움이되지 않습니다. 둘 다 노드를 URL로 해석하지 않습니다. 아마 upvote는 당신의 첫번째 단락을위한 것이 었습니다. – Christo

+0

@Christo Hah, 결론을 내리지 마십시오 :) 질문은 단지 노드로 URL을 확인하는 것이 아니라 콘솔 응용 프로그램에서 노드를 확인하는 것입니다. Umbraco 애플리케이션 컨텍스트 외부에서 게시 된 컨텐트 캐시에 액세스 할 수 없기 때문에 API 서비스를 사용해야합니다. 링크는 Umbraco를 인식하는 콘솔 앱을 만들기위한 전략을 의미합니다. 거기에서 URL을 검색하는 것은 간단합니다. – Digbyswift

2

UmbracoContext없이 내가가 V6에서 가능하다고 생각하지 않습니다

당신이 요구하는 같은 일에 보이는 여기 실이있다 IContent 노드의 URL을 얻는다.

나는 Umbraco 소스 코드를 살펴보고 거기에서 완료되는 방식을 재현하기로 결정했습니다. 나는 이걸 생각해 내 요구를 위해 일했다.

https://gist.github.com/petergledhill/ca2a3a0ea81b06abcb08

public static class ContentExtensions 
{     
    public static string RelativeUrl(this IContent content) 
    { 
     var pathParts = new List<string>(); 
     var n = content; 

     while (n != null) 
     { 
      pathParts.Add(n.UrlName()); 
      n = n.Parent();     
     } 
     pathParts.RemoveAt(pathParts.Count() - 1); //remove root node 
     pathParts.Reverse(); 
     var path = "/" + string.Join("/", pathParts); 
     return path; 
    }  

    public static string UrlName(this IContent content) 
    { 
     return new DefaultUrlSegmentProvider().GetUrlSegment(content).ToLower(); 
    }  
} 
+0

니스. 나는 전에 이것을 보지 못했습니다. 나는 이걸 가지고 주위를 파고들 것이다. – Digbyswift

관련 문제