获取包含服务器部分的媒体网址

时间:2011-05-25 10:21:08

标签: c# sitecore

是否可以获得始终包含服务器部分的MediaManager.GetMediaUrl的网址?

4 个答案:

答案 0 :(得分:8)

为了突破这一点,在Sitecore 7中,AlwaysIncludeServerUrl选项也包含在MediaUrlOptions中(我不知道自哪个版本的Sitecore)

像这样:

MediaUrlOptions muo = new MediaUrlOptions();
muo.AlwaysIncludeServerUrl = true;
String url = MediaManager.GetMediaUrl((MediaItem)item, muo);

答案 1 :(得分:3)

我发现以下内容适用于为媒体项目生成完全限定的网址:

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;
}

生成的网址将与item相关,因此您可能希望提供对您的Home项目的引用,而不是Sitecore.Context.Item

答案 2 :(得分:0)

我最近在Stack Overflow上回答了a similar question。我相信答案也适用于你的。

简短摘要:没有配置可以执行此操作,您需要覆盖一些内置方法来执行此操作。有关详细信息,请参阅上面的链接。

答案 3 :(得分:0)

是的,你可以做到!

设置此参数的正确方法是在 linkManager 部分的配置文件中指定,其中包含有关如何解析网址的其余设置。以下是整个部分,您对 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>