Episerver:如何使用 GetBySegment 方法?

问题描述 投票:0回答:1

我听说 Episerver 中的 GetBySegment() 方法比使用 GetChildren().FirstOrDefault() 具有更好的性能。但我很难理解该方法的用法。

假设我有一个像这样的简单方法。它应该获得网站上应该只有 one 的页面类型,因此“FirstByDefault() 总是返回相同的页面。但是,位置、名称或 url 可能会根据不同的页面而有所不同。环境:

        public virtual PageTypeA GetPageTypeA()
        {
            var pageTypeA = _contentLoader.GetChildren<PageTypeA>(rootPageReference).FirstOrDefault();

            return pageTypeA;
        }

是否可以将这里的“GetChildren().FirstOrDefault()”替换为GetBySegment()方法。据我了解,GetBySegment() 需要一个 urlSegment 字符串,但我不想对其进行“硬编码”,因为正如我所说,位置、名称或 url 可能会根据环境而变化。那么我该如何使用 GetBySegment() 或者是否可以在这里使用它?

我尝试过的是将 urlSegement“硬编码”到 GetBySegement 中,它会找到该页面,但由于我之前描述的原因,我不能这样做。

c# .net episerver optimizely
1个回答
0
投票

我不知道

GetBySegment
,但看过文档、代码和注释。 您正在将苹果与梨进行比较。两种方法不能互换使用。

  • ContentLoader/ContentRepository.GetChildren<T>
    返回给定语言或 LoaderOptions(如果提供)中给定父项下给定类型的所有内容
  • ContentLoader/ContentRepository.GetBySegment
    返回给定父级下具有给定 RouteSegment 的所有内容(例如通过页面的“URL 中的名称”提供)。提供的 LoaderOptions(例如您要使用的语言)将被忽略,直到只有一个匹配项。这是有意的。所以加载器选项只是用来找到最佳匹配。

因此,如果您想以给定语言获取父项下的所有子项,请使用

GetChildren
。如果您只想要一场比赛并且您关心的只是它的 RouteSegment,请使用
GetBySegment

关于性能:

GetChildren
被缓存,所以对第二次调用应该没有影响,特别是因为
FirstOrDefault
基本上是无操作。

© www.soinside.com 2019 - 2024. All rights reserved.