В EPiServer 8 как я могу получить ContentType из элемента контента?
Мне нужно определить тип содержимого для объекта EPiServer в EPiServer 8.0. Это сделано для предотвращения следующего исключения, с которым сталкивается наш код.
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? Благодарю.
1 ответ
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/