在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));
}
但是对我来说它看起来不是最优的。有没有更有效的方法来检查这个?
你可以这样做:
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.IgnoreList
或Sitecore.Pipelines.HttpRequest.FilterUrlExtensions
之后立即添加您的处理器(尽管这是不赞成的,纯粹是为了向后兼容而添加的)。
您的媒体项在这个阶段应该已经被<preprocessRequest>
处理了。