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

时间:2013-05-16 04:08:02

标签: c# asp.net sitecore

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

原因是I want to redirect to an old browser page,但我不希望重定向发生在媒体项请求或静态内容请求中。

这就是我在想的事情:

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

但对我来说这看起来并不理想。是否有更高效的方法来检查这个?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

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

这似乎有点高效。使用Reflector时,IsContentItem在项目的路径以/sitecore/content/开头时返回true。

答案 1 :(得分:3)

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

您可以向layout.aspx页面添加静态绑定,并添加Sitecore规则,该规则检查您的cookie是否存在以决定是否输出消息div / content:

有一些关于此的进一步信息 Sitecore httpRequestBegin Pipeline - In Detail如果你还想沿着这条路走下去。这真的取决于你的确切要求。您是否想要在没有任何检查的情况下重定向,即无效项目,没有布局设置等?

如果是这样,那么在相关处理器之后,或者我会在Sitecore.Pipelines.HttpRequest.IgnoreListSitecore.Pipelines.HttpRequest.FilterUrlExtensions之后立即添加您的处理器(虽然这是为了向后兼容而弃用并纯粹为了向后兼容而添加){{1} }。

您的媒体项目应在此阶段由<httpRequestBegin>处理。