Sitecore Link Manager Url 选项站点解析未设置

Sitecore Link Manager Url Options Site Resolving is not Set

在多站点解决方案中,我使用以下解决方案允许根据站点在不同 link 管理器之间切换:http://thegrumpycoder.com/post/78684655662/sitecore-pipeline-enabled-linkprovider

这似乎按预期工作。我 运行 遇到的问题是以下配置的 siteResolving 未设置为 true:

<linkManager defaultProvider="overridesitecore">
  <providers>
    <clear />
     ...
     <add name="someSiteSpecificLinkManager" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="true" encodeNames="true" languageEmbedding="always" languageLocation="filePath" lowercaseUrls="true" shortenUrls="true" useDisplayName="false" siteResolving="true"  />
     ...
  </providers>
</linkManager>

我已经切换了一些其他设置,只是为了确保它们会更改 link 经理的默认 url 选项,他们确实做到了。 siteResolving 属性不正确吗?

存在一个长期存在的问题,即 siteResolving 未应用于 link 管理器,无论其配置是否正确。

解决方案是在您的提供商中应用设置:

public class SiteResolvingLinkProvider : LinkProvider
{
    public override UrlOptions GetDefaultUrlOptions()
    {
        UrlOptions urlOptions = base.GetDefaultUrlOptions();
        urlOptions.SiteResolving = Settings.Rendering.SiteResolving;
        return urlOptions;
    }
}

另请参阅:http://reasoncodeexample.com/2012/08/09/sitecore-cross-site-links/

听起来您有多个提供商,并且您正在尝试独立控制每个提供商的设置,对吗?在这种情况下,您可以尝试在 link 提供程序配置上提供 siteResolving 属性(如您所示),然后将该配置读入 LinkProvider 上的 属性:

public bool SiteResolving { get; set; }

public override void Initialize(string name, NameValueCollection config)
{
    base.Initialize(name, config);
    SiteResolving = MainUtil.GetBool(config["siteResolving"], true);
}