Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Umbraco API控制器ASP.NET获取发布的内容_C#_Asp.net_Umbraco - Fatal编程技术网

C# 如何从Umbraco API控制器ASP.NET获取发布的内容

C# 如何从Umbraco API控制器ASP.NET获取发布的内容,c#,asp.net,umbraco,C#,Asp.net,Umbraco,我将一些电子邮件模板(表示样本,不要与umbraco模板混淆)存储在umbraco后台。在某些时候,我需要使用此模板发送电子邮件(主题、正文、抄送、密件抄送等)。为此,我使用自动生成的模型,需要ippublishedcontent进行初始化 因此,我无法初始化此模型,因为我无法获取类型为ippublishedcontent的内容 我凭身份证拿到的时候一切都很好。但我不想在id发生变化时依赖它,我决定使用path,但我不能这样做。执行以下操作时,我会得到NullReferenceException

我将一些电子邮件模板(表示样本,不要与umbraco模板混淆)存储在umbraco后台。在某些时候,我需要使用此模板发送电子邮件(主题、正文、抄送、密件抄送等)。为此,我使用自动生成的模型,需要
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页面,或者只是一个独立的模板?