如何从 Umbraco API 控制器 ASP.NET 获取发布的内容
How to get published content from Umbraco API controller ASP.NET
我正在 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 的新手并且正在努力理解我应该如何做某些事情。
我最初尝试的另一种方法(也没有成功)是通过文档类型 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)
但在这里我得到 publishedContent
作为 IContent
并且无法将其转换为 IPublishedContent
。
更新 1
我发现原因是我试图从 Umbraco API 控制器获取已发布的内容。所以问题是 有没有办法从 api 获取已发布的内容?
你没有提到 Umbraco,但你可以像这样使用 UmbracoHelper。
IPublishedContent content = UmbracoHelper.TypedContent(content.Id);
如果您无法访问 UmbracoHelper,请这样做:
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
我正在 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 的新手并且正在努力理解我应该如何做某些事情。
我最初尝试的另一种方法(也没有成功)是通过文档类型 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)
但在这里我得到 publishedContent
作为 IContent
并且无法将其转换为 IPublishedContent
。
更新 1
我发现原因是我试图从 Umbraco API 控制器获取已发布的内容。所以问题是 有没有办法从 api 获取已发布的内容?
你没有提到 Umbraco,但你可以像这样使用 UmbracoHelper。
IPublishedContent content = UmbracoHelper.TypedContent(content.Id);
如果您无法访问 UmbracoHelper,请这样做:
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);