2

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

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

这就是我想做的事情:

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

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

4

2 回答 2

4

你可以这样做:

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

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

于 2013-05-16T12:39:13.627 回答
3

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

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

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

如果是这样,那么在相关处理器之后,否则我Sitecore.Pipelines.HttpRequest.IgnoreListSitecore.Pipelines.HttpRequest.FilterUrlExtensions<httpRequestBegin>.

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

于 2013-05-16T05:29:21.343 回答