我需要在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/