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


  EPiServer.Core.TypeMismatchException:标识为“ 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?谢谢。

最佳答案

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/中的示例

关于c# - 在EPiServer 8中,如何从内容项获取ContentType?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43598040/

10-10 20:03