【问题标题】:How to get published content from Umbraco API controller ASP.NET如何从 Umbraco API 控制器 ASP.NET 获取已发布的内容
【发布时间】:2018-05-30 15:51:50
【问题描述】:

我在 Umbraco 后台存储了一些电子邮件模板(表示样本,不要与 umbraco 模板混淆)。在某些时候,我需要使用此模板(主题、正文、抄送、密件抄送等)发送电子邮件。为此,我使用自动生成的模型,需要 IPublishedContent 进行初始化。

因此我无法初始化此模型,因为我无法获取 IPUblishedContent 类型的内容。

当我通过 ID 得到它时,一切正常。但我不想依赖 id 因为它发生变化并决定使用 path 并且不能这样做。执行以下操作时出现 NullReferenceException:

 contentCache.GetByRoute(true, "relative path to email template")//I think I am mistaken here as I am using cache

相对路径看起来像 "/settings/emailtemplate/registrationtemplate" 任何人都可以指出我如何实现这一点,因为我是 Umbraco 的新手并且正在努力理解我应该如何做某些事情。


我最初尝试的另一种方法(也没有成功)是通过 doc type id 获取内容

 var contentService = umbracoContext.Application.Services.ContentService;
 var contentTypeService = umbracoContext.Application.Services.ContentTypeService;
 var contentType = contentTypeService.GetContentType("emailSettings");
 var templates = contentService.GetContentOfContentType(contentType.Id);

然后我从 ContentService 获取内容:

 var content = templates.FirstOrDefault(c => c.Name.Contains("Registration"));
 var publishedContent = contentService.GetById(content.Id)

但在这里我得到publishedContentIContent 并且无法将其转换为IPublishedContent


更新 1

我发现原因是我试图从 Umbraco API 控制器获取已发布的内容。所以问题是有没有办法从 api 获取已发布的内容

【问题讨论】:

  • 你的 umbraco 版本是什么?
  • 它是 Umbraco 7.5.7
  • 在 GetByRoute 部分,用于通过 URL 获取页面。如果没有 URL 为“/settings/emailtemplate/registrationtemplate”的 umbraco 页面,它将不会返回任何内容。您的电子邮件模板是否有相应的 Umbraco 页面,或者 iOS 只是一个独立的模板?

标签: c# asp.net umbraco


【解决方案1】:

你没有提到 Umbraco,但你可以像这样使用 UmbracoHelper。

IPublishedContent content = UmbracoHelper.TypedContent(content.Id);

如果您无法访问 UmbracoHelper,请像这样:

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);

【讨论】:

  • 不幸的是,它没有解决问题。 UmbracoHelper.TypedContent(content.Id); 空模型的结果。
  • 如果 ID 正确并且内容节点在 umbraco 发布的内容缓存中,那么您将获得内容 - 如果内容不存在,ut 只会返回 null,因此您的 ID 错误,或内容未发布
猜你喜欢
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2018-02-14
  • 2014-12-17
  • 1970-01-01
  • 2013-10-30
  • 2023-04-07
  • 2019-03-28
相关资源
最近更新 更多