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



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

我想从网络服务调用的自定义类执行此操作,以自动发送包含每个节点 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 中使用 Node API,它非常古老并且已被弃用。umbraco.library也一样!

执行此操作的一种简单方法是在 Umbraco 站点上创建一个 WebAPI 控制器终结点,该终结点获取站点上每个页面的 URL,并将它们作为 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 列表并使用它来发送电子邮件。

相关内容