【问题标题】:Easy way to identify page requests in Sitecore在 Sitecore 中识别页面请求的简单方法
【发布时间】:2013-05-16 20:44:30
【问题描述】:

我想从运行到 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));
}

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

【问题讨论】:

    标签: c# asp.net sitecore


    【解决方案1】:

    你可以这样做:

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

    这似乎更高效一些。使用 Reflector,当项目的路径以 /sitecore/content/ 开头时,IsContentItem 返回 true。

    【讨论】:

    • 谢谢,这正是我想要的!
    • Context.Item 对于请求 /sitecore/shell 返回 false。有没有更好的方法来识别 sitecore 原生页面请求?
    【解决方案2】:

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

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

    还有一些关于 Sitecore httpRequestBegin Pipeline - In Detail 如果您仍然想沿着这条路线继续前进。这实际上取决于您的确切要求。您是否要在不进行任何检查的情况下重定向,即无效项目、未设置布局等?

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

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

    【讨论】:

    • 谢谢,我绝对同意,如果客户坚持使用单独的页面,我很乐意采用条件渲染路线。
    • 有时我想知道当客户坚持这样疯狂的要求时,他们生活在什么星球上!
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2011-08-07
    • 2013-10-28
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多