在Sitecore中识别页面请求的简单方法

本文关键字:请求 简单 方法 Sitecore 识别 | 更新日期: 2023-09-27 18:13:42

我想从运行在httpRequestBegin管道末端的代码中识别对Sitecore页面的请求。

原因是我想重定向到一个旧的浏览器页面,但我不希望重定向发生在媒体项目请求或静态内容请求。

我是这么想的:

private static bool IsPageRequest(HttpRequestArgs args)
{
    return Context.Item != null &&
           Context.Item.Axes.IsDescendantOf(args.GetItem(Context.Site.RootPath));
}

但是对我来说它看起来不是最优的。有没有更有效的方法来检查这个?

在Sitecore中识别页面请求的简单方法

你可以这样做:

private static bool IsPageRequest(HttpRequestArgs args)
{
    return Context.Item != null && Context.Item.Paths.IsContentItem;
}

这样看起来性能更好一些。使用Reflector,当项目的路径以/sitecore/content/开头时,IsContentItem返回true。

建议不要惹恼你的用户:为什么你不显示一个覆盖的div与升级通知,可以覆盖所有/一些用户登陆的页面。添加一个[X]以允许他们关闭并返回到他们想做的任何事情?

您可以向布局添加静态绑定。并添加一个Sitecore规则,检查您的cookie是否存在,以决定是否输出消息div/content:

  • 使用Sitecore规则引擎个性化基于静态的组件
  • Sitecore规则引擎:如何创建自定义条件
  • Sitecore规则引擎和条件渲染

关于……有一些进一步的信息Sitecore httpRequestBegin管道-详细说明,如果你仍然想继续这条路线。这取决于你的具体要求。你想重定向没有任何检查,即无效的项目,没有布局集等?

如果是这样,那么在相关处理器之后,否则我会在<httpRequestBegin>Sitecore.Pipelines.HttpRequest.IgnoreListSitecore.Pipelines.HttpRequest.FilterUrlExtensions之后立即添加您的处理器(尽管这是不赞成的,纯粹是为了向后兼容而添加的)。

您的媒体项在这个阶段应该已经被<preprocessRequest>处理了。