在EPiServer 8中,如何从内容项中获取ContentType?

时间:2017-04-24 21:30:29

标签: c# search episerver

我需要在EPiServer 8.0中检测EPiServer对象的内容类型。这是为了防止我们的代码遇到以下异常。

  

EPiServer.Core.TypeMismatchException:ID为'202'的内容属于类型   'Castle.Proxies.PDFMediaFileProxy'不继承所需   输入'EPiServer.Core.PageData'

这是一段缩写代码,用于显示我们遇到异常的位置。

// This property in our class gets populated elswhere.
public List<IndexResponseItem> SearchResult { get; set; }

// Code in method that fails.
var repository = ServiceLocator.Current.GetInstance<IContentRepository>();
foreach (var item in SearchResult)
{
    var foo = new UrlBuilder(item.GetExternalUrl());
    IContent contentReference = UrlResolver.Current.Route(foo);
    if (contentReference != null)
    {
        // This line of code breaks.
        var currPage = repository.Get<PageData>(contentReference.ContentGuid);
    }
}

当我们的搜索返回任何PageData内容类型时,上述代码有效。但如果它遇到PDF内容类型,则会中断。

获取ContentTypeID非常简单(通过contentReference.ContentTypeID)。但我想实际检查每个对象的实际内容类型。如何获取ContentType?感谢。

1 个答案:

答案 0 :(得分:3)

MediaFile个对象不是PageData个实例,因此您需要验证contentReference is PageData以及

if (contentReference != null && contentReference is PageData)
{
    var currPage = repository.Get<PageData>(contentReference.ContentGuid);
}

看起来好像是从Episerver Search构建自定义实现,我建议您查看文档中的示例http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-CMS/8/Search/Search-integration/