Получить медиа-адрес, включая серверную часть
Можно ли получить URL с MediaManager.GetMediaUrl
что всегда включает в себя серверную часть?
4 ответа
Просто чтобы поднять это, в Sitecore 7 AlwaysIncludeServerUrl
опция также включена в MediaUrlOptions
(Я не знаю, с какой версии Sitecore)
Как это:
MediaUrlOptions muo = new MediaUrlOptions();
muo.AlwaysIncludeServerUrl = true;
String url = MediaManager.GetMediaUrl((MediaItem)item, muo);
Я обнаружил, что следующее будет работать для создания полностью определенных URL для медиа-элементов:
public static string GetMediaUrlWithServer(MediaItem mediaItem, Item item = null)
{
item = item ?? Sitecore.Context.Item;
var options = new UrlOptions {AlwaysIncludeServerUrl = true, AddAspxExtension = false};
var itemUrl = LinkManager.GetItemUrl(item, options);
var mediaOptions = new MediaUrlOptions {AbsolutePath = true};
var mediaUrl = MediaManager.GetMediaUrl(mediaItem, mediaOptions);
return itemUrl + mediaUrl;
}
Произведенные URL будут относительно item
поэтому вы можете указать ссылку на ваш домашний предмет вместо Sitecore.Context.Item
Я недавно ответил на аналогичный вопрос о переполнении стека. Я верю, что ответ относится и к твоему.
Краткое резюме: для этого нет конфигурации, вам нужно переопределить некоторые встроенные методы для этого. Смотрите выше ссылку для точных деталей.
Да, вы можете сделать это!
Правильный способ установки этого параметра - указать в файле конфигурации в разделе linkManager, где у вас есть это, а остальные параметры, касающиеся того, как ваши URL будут разрешены. Вот весь раздел, вам интересен параметр alwaysIncludeServerUrl:
<linkManager defaultProvider="sitecore">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel"
alwaysIncludeServerUrl="true"
addAspxExtension="true"
encodeNames="true"
languageEmbedding="asNeeded"
languageLocation="filePath"
shortenUrls="true"
useDisplayName="false" />
</providers>
</linkManager>