在 Umbraco 7.13 中,我需要一种方法来获取节点 URL

In Umbraco 7.13, I need a way to get a nodes URL

我想在 Umbraco 中获取节点的 URL。

我想通过网络服务调用的自定义 class 执行此操作,以自动发送包含每个节点的电子邮件 URL。

我一般用这个方法

 using umbraco.NodeFactory;
 ...
 Node node = new Node(1234);
 string link = node.Url; 

但是这会返回一个错误,即对 umbracoContext 的引用不能为空。

据我从网上了解到,这是因为 cron 作业正在调用此服务,然后 umbracoContext 为空。

我需要一种方法来获取节点的 url,方法是提供节点 ID。

我已经尝试了所有这些方法,它们都返回相同的错误:

 string url = umbraco.library.NiceUrl(1234);


 var umbracoHelper = new UmbracoHelper(Umbraco.Web.UmbracoContext);
 string url  = umbracoHelper.Url(1234);


 var objectNode = umbracoHelper.TypedMedia(1234);
 string url = objectNode.Url;

有什么建议吗?

首先,您不应该在 V7 中使用节点 API,它非常旧并且已被弃用。 umbraco.library!

相同

一个简单的方法是在 Umbraco 站点上创建一个 WebAPI 控制器端点,它获取站点上每个页面的 URL 并将它们 returns 作为 URL 数组.如果您希望确保安全,可以向其中添加身份验证等。 WebAPI 控制器的文档可以在下面找到:

https://our.umbraco.com/documentation/reference/routing/webapi/

你的 WebAPI 控制器将有一个完整的 UmbracoContext 可用和访问 Umbraco 助手,所以你可以有大致这样的东西:

public class AlertController : UmbracoApiController
{
    public List<string> GetAllUrls()
    {
        var list = new List<string>();

        var allContent = Umbraco.TypedContentAtRoot().FirstOrDefault().DescendantsOrSelf();

        foreach (var page in allContent)
        {
            list.Add(page.Url);
        }

        return list;
    }
}

您可能想要过滤掉不需要的内容或不需要列出的内容(例如设置节点)。

然后您的其他服务可以调用 webAPI 端点并使用 URL 列表并使用它来发送电子邮件。