В 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/

Другие вопросы по тегам