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 ページに静的バインディングを追加し、Cookie の存在をチェックしてメッセージ div/content を出力するかどうかを決定する Sitecore ルールを追加できます。

Sitecore httpRequestBegin パイプラインに関する詳細情報がいくつかあり ます -このルートをさらに進めたい場合は詳細をご覧ください。それは本当にあなたの正確な要件に依存するでしょう. 無効なアイテム、レイアウト セットがないなどのチェックなしでリダイレクトしますか?

Sitecore.Pipelines.HttpRequest.IgnoreListその場合は、関連するプロセッサの後に、またはそうでない場合は、またはの直後にプロセッサを追加することを検討しますSitecore.Pipelines.HttpRequest.FilterUrlExtensions(ただし、これは非推奨であり、下位互換性のために純粋に追加されています) <httpRequestBegin>

あなたのメディア アイテムは、この段階ですでに によって処理されているはず<preprocessRequest>です。

于 2013-05-16T05:29:21.343 に答える