C# 如何从Umbraco API控制器ASP.NET获取发布的内容
我将一些电子邮件模板(表示样本,不要与umbraco模板混淆)存储在umbraco后台。在某些时候,我需要使用此模板发送电子邮件(主题、正文、抄送、密件抄送等)。为此,我使用自动生成的模型,需要C# 如何从Umbraco API控制器ASP.NET获取发布的内容,c#,asp.net,umbraco,C#,Asp.net,Umbraco,我将一些电子邮件模板(表示样本,不要与umbraco模板混淆)存储在umbraco后台。在某些时候,我需要使用此模板发送电子邮件(主题、正文、抄送、密件抄送等)。为此,我使用自动生成的模型,需要ippublishedcontent进行初始化 因此,我无法初始化此模型,因为我无法获取类型为ippublishedcontent的内容 我凭身份证拿到的时候一切都很好。但我不想在id发生变化时依赖它,我决定使用path,但我不能这样做。执行以下操作时,我会得到NullReferenceException
ippublishedcontent
进行初始化
因此,我无法初始化此模型,因为我无法获取类型为ippublishedcontent
的内容
我凭身份证拿到的时候一切都很好。但我不想在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
,无法将其转换为ippublishedcontent
更新1
我发现原因是我试图从Umbraco API控制器获取已发布的内容。所以问题是有没有办法从api中获取已发布的内容?您没有提到Umbraco,但可以像这样使用Umbraco助手
IPublishedContent content = UmbracoHelper.TypedContent(content.Id);
如果您无法访问UmbracoHelper,请按以下方式进行操作:
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
不幸的是,它没有解决这个问题。
UmbracoHelper.TypedContent(content.Id)的结果代码>空模型。如果Id正确且内容节点位于umbraco已发布的内容缓存中,则您将获取内容-如果内容不在缓存中,则ut将仅返回null,因此您的Id错误,或者内容未发布。您的umbraco版本是什么?GetByRoute部件上的umbraco 7.5.7,这是为了通过URL获取页面。如果没有URL为“/settings/emailtemplate/registrationtemplate”的umbraco页面,则不会返回任何内容。您的电子邮件模板是否有相应的Umbraco页面,或者只是一个独立的模板?