0

我在处理器上的 Sitecore 管道中工作。我需要确定发送的请求是针对.aspx没有上下文项的静态页面,还是请求的页面不存在。

这将在ItemResolver进程触发后立即发生,因此数据库设置master.aspx通过管道运行和对不存在的页面的请求。

我无法检查是否Context.Item == null因为静态页面没有与之关联的项目,并且我想保持这种状态,因为所述页面上的内容不会改变。

如果您有任何想法来区分这些,请告诉我!

4

2 回答 2

2

您也许可以使用Sitecore.Context.Page.FilePath. 它将Layout在 Sitecore 项目(即“/layouts/standard layout.aspx”)上设置为您的,而在静态页面上,它将成为您页面的路径。

如果您的静态页面都位于与 Sitecore 布局不同的位置,则只需匹配FilePath.

于 2013-07-24T08:29:23.737 回答
2

我认为你部分回答了你自己的问题。

如果您在 ItemResolver 之后将组件放入 httpBeginRequest 管道中,您应该能够检查是否Context.Item == null. 如果是null,则您知道该 URL 未解析为 Sitecore 项目。此时,您可以使用HttpContext.Current.Server.MapPath()它来查看它是否解析为路径。如果是这样,那么您就知道它是一个静态的 .aspx 文件。就像是:

public class CheckPath : HttpRequestProcessor
{
    public override void Process(HttpRequestArgs args)
    {
        if (Sitecore.Context.Item == null)
        {
            if (args.Context.Server.MapPath(args.Context.Request.RawUrl) == null)
            {
                // 404
            }
            else
            {
                // Static
            }
        }
        else 
        {
            // Sitecore item
        }
    }
}

将其修补到 httpBeginRequest 管道中:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <pipelines>
            <httpRequestBegin>
                <processor patch:after="*[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="MyNamespace.CheckPath, MyAssemblyName" />
            </httpRequestBegin>
        </pipelines>
    </sitecore>
</configuration>
于 2013-07-24T13:52:25.753 回答