[英]Sitecore GetItem returns null when retrieving items for different sites
我们在项目中使用Sitecore 8,该项目具有两个不同的站点。
尝试检索这些站点之一的主页项时,似乎不可靠:
var database = Factory.GetDatabase("Web");
var homeItem = database.GetItem(new ID("{FAF3904C-4BE4-ED80-891A-DFEE0A4C18C5}"));
当站点刚刚在IIS中重新启动时,或者当Sitecore缓存被清空时,有时homeItem变量为null。
似乎数据库对象确实为一个站点(“当前”站点,与我们的请求URL相对应)提供了项目,但没有为另一站点提供项目。
在对另一个站点的后续请求中,两个站点的项目似乎都可用。 有时,即使在重新启动IIS或清除Sitecore缓存之后,从一开始就可以使用所有项目。 (我还没有找到一些步骤可以始终如一地重现该问题。)
我猜想某些地方(可能在Sitecore缓存之外)正在发生某种缓存,但是我不知道它到底是什么。
有谁知道为什么database.GetItem有时对于确实存在但可能与当前站点不同的站点返回null? 更重要的是:如何在确保所有站点中的项目都可用的情况下从数据库中获取项目?
简短答案:
事实证明,这与安全性有关。 当前请求的用户无权访问另一个站点的项目。
更多信息:
我在早期测试中使用SecurityDisabler时未立即发现此问题的原因是,我们的项目使用的是自定义AuthorizationProvider,显然它无法与SecurityDisabler正常配合。
同样,仍然不清楚为什么我们确实可以访问第二个站点的后续请求中的所有项目,但是我认为这可能与某种程度上的缓存有关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.