我在处理器上的 Sitecore 管道中工作。我需要确定发送的请求是针对.aspx
没有上下文项的静态页面,还是请求的页面不存在。
这将在ItemResolver
进程触发后立即发生,因此数据库设置master
为.aspx
通过管道运行和对不存在的页面的请求。
我无法检查是否Context.Item == null
因为静态页面没有与之关联的项目,并且我想保持这种状态,因为所述页面上的内容不会改变。
如果您有任何想法来区分这些,请告诉我!
您也许可以使用Sitecore.Context.Page.FilePath
. 它将Layout
在 Sitecore 项目(即“/layouts/standard layout.aspx”)上设置为您的,而在静态页面上,它将成为您页面的路径。
如果您的静态页面都位于与 Sitecore 布局不同的位置,则只需匹配FilePath
.
我认为你部分回答了你自己的问题。
如果您在 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>