C# 为什么在控制器中重置我的Sitecore.Context.Language?

C# 为什么在控制器中重置我的Sitecore.Context.Language?,c#,asp.net-mvc,sitecore,sitecore8,C#,Asp.net Mvc,Sitecore,Sitecore8,Sitecore似乎对其上下文对象中的语言变量做了一些奇怪的事情。如果我使用url?sc_Lang=ru ru(获取我网站的俄语版本)加载CMS页面,当它到达我的MVC控制器时,它将重置为语言返回到en public PartialViewResult Navigation() { //en var language = Sitecore.Context.Language; } 我知道sitecore确实在某个时候设置了这一点,因为如果我添加一个HTTP管道,我可以看到site

Sitecore似乎对其上下文对象中的语言变量做了一些奇怪的事情。如果我使用url
?sc_Lang=ru ru
(获取我网站的俄语版本)加载CMS页面,当它到达我的MVC控制器时,它将重置为语言返回到
en

public PartialViewResult Navigation()
{
    //en
    var language = Sitecore.Context.Language;
}
我知道sitecore确实在某个时候设置了这一点,因为如果我添加一个HTTP管道,我可以看到
sitecore.Context.Language
as
ru

public class LanguageResolver
{
    public void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        //ru-RU
        var language = Sitecore.Context.Language;
    }
}
注册:


按照

我深入研究了sitecore DLL,发现
Sitcore.Context.Language
基本上是
HttpContext.Current.Items[“sc_Language”]
的包装器。当我检查这一点时,我看到了相同的结果(即在管道中它是
ru
在控制器中它是
en

因此,某个地方正在将此
HttpContext
转换为
“en”

作为一个实验,我在
Items
集合中加入了一个新变量。然后我可以在控制器中再次看到这一点(处于正确的状态),因此Items集合被正确地传递到控制器中

我最初并没有开发这个网站,但我在代码库中看不到任何改变这个语言变量的地方

还有其他人经历过吗?我错过了什么?需要配置什么,请检查

sitecore文档(和往常一样)在这个问题上非常糟糕


要跟进@jammykam的评论:

我可以看到lang cookie的响应
Set cookie:redrow#lang=ru-ru;path=/
和语言设置:

在OOB中使用语言设置器的地方有:

即使调用方来自可疑列表顶部的
Sitecore.MVC
名称空间,我还是建议调试Sitecore.Context.Languagesetter,以找到真正的罪魁祸首。您还将看到语言切换逻辑背后的机制/动机


尽管可以优化
getter
,但您仍然可以。

为了确保没有发生令人讨厌的事情,您可以尝试清除cookie(或者检查cookie并确保
网站#lang=ru
)。您是否已将
ru
添加到Sitecore?您的本地系统支持吗?@jammykam,在上面添加了详细信息。我很好奇以前是否有人在MVC环境中看过这个?我猜它对某个人,某个地方起作用了?你能把你的语言解析器移到项目解析器之前吗?Sitecore中的默认顺序是:其他进程。。。在语言解析器目前实际上没有做任何事情之后,我只是把它作为一个截取点来使用,看看该语言是如何设置的@SiteCoreClimper现在说在管道中移动它可能会很有趣……嗯,我必须检查它是否有效,如果有效,我会像回答一样移动我的评论。我已经6年没有在sitecore上工作了,所以我不能真正投票或接受这个答案,因为我不知道它是否有用。所以我得看看别人怎么想