我需要在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?感谢。
答案 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/