Sitecore部分图片路径额外追加/sitecore/shell前缀的原因是什么?
Sitecore媒体URL额外追加
/sitecore/shell前缀的原因 这个问题是Sitecore媒体URL生成逻辑的默认机制导致的,具体触发原因如下:
- 上下文站点配置不匹配
MediaManager.GetMediaUrl()方法默认会读取当前请求绑定的站点配置生成路径。当代码运行在Sitecore后台上下文(比如内容编辑器操作、自定义后台功能、未指定站点的定时任务/事件处理器中),默认绑定的是shell站点,该站点的配置规则会自动给媒体URL添加/sitecore/shell前缀。 - 媒体项归属站点未显式指定
如果你的媒体项归属于前端站点的媒体库,但生成URL时没有显式指定前端站点上下文,方法会沿用当前的shell站点规则生成路径,就会出现多余前缀。 - 调用方法时未传入自定义配置
你当前的调用逻辑没有传入MediaUrlOptions参数指定生成规则,方法会完全采用上下文的默认配置,无法覆盖shell站点的前缀规则。
修复方案
你可以通过显式指定站点上下文的方式避免该问题,示例代码如下:
// 初始化自定义媒体URL配置,指定前端站点 var mediaUrlOptions = new MediaUrlOptions { AlwaysIncludeServerUrl = false, // 替换为你项目中实际的前端站点名称 Site = Sitecore.Sites.SiteContext.GetSite("frontSite"), DisableBrowserCaching = false }; // 生成带哈希保护的媒体路径 var mediaUrl = Sitecore.StringUtil.EnsurePrefix('/', HashingUtils.ProtectAssetUrl(MediaManager.GetMediaUrl(imgMediaItem, mediaUrlOptions)));
如果你的代码运行在非web请求上下文(比如定时任务、事件回调),可以先切换站点上下文再执行URL生成逻辑:
// 切换到前端站点上下文 using (new Sitecore.Sites.SiteContextSwitcher(Sitecore.Sites.SiteContext.GetSite("frontSite"))) { // 在此处执行媒体URL生成逻辑 }
内容的提问来源于stack exchange,提问作者Anthony Fernandes
相关产品推荐
相关产品推荐

