Параметры URL-адреса Sitecore Link Manager Разрешение сайта не установлено

В многосайтовом решении я использую следующее решение, позволяющее переключаться между различными менеджерами ссылок на основе сайта: 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>

Я переключил несколько других настроек, чтобы убедиться, что они изменят параметры URL-адреса менеджера ссылок по умолчанию, и они это сделали. Является ли siteResolving неправильным атрибутом для использования?


person Teeknow    schedule 21.04.2015    source источник


Ответы (1)


Существует давняя проблема, связанная с тем, что siteResolving не применяется к диспетчеру ссылок, несмотря на его правильную настройку.

Решение состоит в том, чтобы применить настройку в вашем провайдере:

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/

Похоже, у вас несколько провайдеров, и вы пытаетесь управлять настройками независимо от каждого провайдера, верно? В этом случае вы можете попробовать указать атрибут 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);
}
person Derek Hunziker    schedule 21.04.2015
comment
Я действительно хотел избежать добавления конфигурации в код на основе глобальной настройки. Есть ли способ получить атрибут siteResolving из менеджера ссылок? Я лучше сделаю это. - person Teeknow; 21.04.2015
comment
Я думаю, что Дерек делает вывод о том, что LinkManager не учитывает значение siteResolving, указанное в конфигурации, и в этом вся проблема. - person Martin Davies; 21.04.2015
comment
Да, это определенно проблема, но я спрашиваю об обходном пути, который я бы предпочел, а не тот, который был предоставлен. - person Teeknow; 21.04.2015
comment
По сути, использование подхода GrumpyCoder требует, чтобы siteResolving было правдой. я не думаю, что это работает, если вы установите для него значение false. Так что пока я согласен, что применение конфига в коде не очень хорошо. В этом случае вы вообще не можете назвать это конфигурацией - это требование. - person Martin Davies; 21.04.2015
comment
Как же так? Возможно, его нужно будет установить в глобальных параметрах URL-адреса по умолчанию, установив для Settings.Rendering.SiteResolving значение true, но siteResolving ничего не значит в диспетчере ссылок, если только он не будет прочитан, поскольку Дерек обновил свой ответ, чтобы показать. @ Дерек, это именно то, что я искал. Спасибо! - person Teeknow; 21.04.2015