我在控制台应用程序中使用Umbraco。
当我尝试为某个节点获取NiceUrl
时,这是不可能的,因为UmbracoContext.Current
为空。
我可以使用这样的ID获取节点路径:" -1,1067,1080",但不知道如何以url格式转换它。
如何在控制台应用程序中获取Node的NiceUrl
?
我接下来做了: 在我的控制台应用程序中,我通过Id获取节点,简单如下:
Node someNode = new Node(nodeId);
当我尝试获取NiceUrl时:
string url = someNode.NiceUrl;
获取ArgumentNullException。
我检查了原因:找到下一个答案NiceUrl
使用UmbracoContext,因此它不可能,因为它为空。
此外,我无法使用此功能:UmbracoContext.Current.ContentCache.GetById(someidhere).Url
感谢。
答案 0 :(得分: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();
}
}
答案 1 :(得分: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