Sitecore 解析URL时出错';没有空间的s

Sitecore 解析URL时出错';没有空间的s,sitecore,sitecore8,sitecore8.2,Sitecore,Sitecore8,Sitecore8.2,目前正在努力将我们的网站从7.2升级到8.2 161115,如果URL中没有空间,则获取文档未找到错误 我们网站中几乎所有的URL在内容项名称中都有一个空格,可以正常工作。只有少数人没有 例如,这些工作: /Page Name/ /Page-Name/ /Page/Sub Page/ /Page/Sub-Page/ 这些方法不起作用: /Page /Page/SecondaryPage 此错误发生在我们称为“上下文解析器”的特殊模板上,该模板根据规则将访问者转发到不同的页面。模板有三个字段:

目前正在努力将我们的网站从7.2升级到8.2 161115,如果URL中没有空间,则获取文档未找到错误

我们网站中几乎所有的URL在内容项名称中都有一个空格,可以正常工作。只有少数人没有

例如,这些工作:

/Page Name/
/Page-Name/
/Page/Sub Page/
/Page/Sub-Page/
这些方法不起作用:

/Page
/Page/SecondaryPage
此错误发生在我们称为“上下文解析器”的特殊模板上,该模板根据规则将访问者转发到不同的页面。模板有三个字段:

Forwarding Enabled (checkbox)
Rules (ruleset)
Default Item (droptree)
这样做的目的是,这些项目决定将访客送往何处。我们有一个运行以下代码的管道:

public override void Process(HttpRequestArgs args)
{
    if (args == null) return;

    var item = Sitecore.Context.Item;
    if (item == null) return;

    if (item.TemplateID != SitecoreDefinitions.ContextForwarderTemplate) return;

    if (!item.IsContextForwarderEnabled()) return;

    var rulesItem = item.Fields["Rules"];
    if (rulesItem != null)
    {
        RuleFactory.InvalidateCache();
        var rules = RuleFactory.GetRules<RuleContext>(rulesItem);
        if (sitecoreRepository.ExecuteRules(rules.Rules))
            return;                   
    }

    ReferenceField refItem = item.Fields["Context"];
    Context.Item = refItem.TargetItem;
}

想法?通过删除空格,我们可以在工作URL上使用此模板类型轻松复制此问题,并在失败的URL上添加空格以使其正常工作。

我看不到您提到错误的那一行(
Sitecore.Context.Item=someNewItem
)在您发布在那里的
过程中的
函数中。最后一行:
Context.Item=refItem.TargetItem我可以单步通过管道,每次都会分配正确的上下文项。它在退出my pipeline且URL路径中没有空格后抛出not found。问题很可能是Context.Item再次由MVC特定管道解决。尝试这里的解决方案,以利用MVC管道,从而尊重您的自定义逻辑:这就是解决方案
Sitecore.Context.Item = someNewItem