Sitecore Glass.Mapper returns 空

Sitecore Glass.Mapper returns null

突然间,没有明显的原因,使用 Glass.Mapper 的一段代码总是工作正常,但不再如此。我正在尝试检索我网站的 根元素 的 Glass 包装器,它是模板 MenuPage:

var root = Sitecore.Context.Database.GetItem("/sitecore/content/ecosystem");

此元素不为空。但是当我尝试检索它的 Glass.Mapper 版本时:

var TreeHead = new SitecoreContext().GetItem<MenuPage>(root.ID.Guid.ToString());

此项,以前从未为空,现在一直如此。

我读过 this question on the same subject,事实上,当我检查我网站的根目录时,语言似乎设置为 "hr" - 我从未明确设置的值,但它是我之前添加的我的网站的一级子级,然后因为它导致问题而被删除。

http://screencast.com/t/aMhy7yl3

这会不会以某种方式让 Sitecore/Glass.Mapper 认为 "hr"(克罗地亚语)应该是语言,从而返回一个空项?在这种情况下,如何将语言改回英语?

此问题是由于您之前访问“/hr”时使用的语言 cookie 不正确,Sitecore 将其解释为克罗地亚语请求。再次访问该页面,即使它不存在并检查 cookie,您将看到它设置为 website#lang=hr(在资源选项卡的 Chrome 中)。即使您的系统上没有设置该语言,httpRequestBegin 管道中的 LanguageResolver 处理器仍会将其设置为上下文语言。由于该项目不存在语言版本,因此 Glass 返回 null:

目前最简单的解决办法是清除cookies来解决问题。

如果您想完全避免这种情况,长期解决方案将需要覆盖某些 Sitecore 处理器,不允许语言解析器为无效语言设置 cookie,然后为无效语言抛出 404。这里有更多信息,但我认为它应该比所讨论的更进一步:https://sdn.sitecore.net/forum//ShowPost.aspx?PostID=61854