获取与Sitecore中的URL匹配的项目

时间:2012-12-11 06:41:47

标签: sitecore

在我正在构建的网站中,我正在尝试使用引用来验证AJAX请求来自正确的URL。

要做到这一点,我想让Sitecore解析一个项目的URL。例如,

http://www.mysite.com/abc/def

可能会解析到路径

的项目

sitecore/Content/MySite/Home/abc/def

在我的代码中推荐的方法是什么?

4 个答案:

答案 0 :(得分:6)

感谢所有答案,但他们都没有做我需要的一切。这对我有用。

var url = new Uri(...);

// Obtain a SiteContext for the host and virtual path
var siteContext = SiteContextFactory.GetSiteContext(url.Host, url.PathAndQuery);

// Get the path to the Home item
var homePath = siteContext.StartPath;
if (!homePath.EndsWith("/"))
    homePath += "/";

// Get the path to the item, removing virtual path if any
var itemPath = MainUtil.DecodeName(url.AbsolutePath);
if (itemPath.StartsWith(siteContext.VirtualFolder))
    itemPath = itemPath.Remove(0,siteContext.VirtualFolder.Length);

// Obtain the item
var fullPath = homePath + itemPath;
var item = siteContext.Database.GetItem(fullPath);

答案 1 :(得分:1)

不要真正得到你想要做的事情(使用你的AJAX请求等),但如果你想让http://www.mysite.com/abc/def解析项sitecore/content/MySite/Home/abc/def,你需要配置你的{{} 1}}在web.config中如下:

<site>

答案 2 :(得分:1)

您可以使用方法ItemManager.GetItem(itemPath, language, version, database, securityCheck)根据它的(完整)路径解析项目。

答案 3 :(得分:0)

此答案对遇到此问题的其他访问者来说更有效。如果使用Sitecore 8,则可以执行以下操作:

new Sitecore.Data.ItemResolvers.ContentItemPathResolver().ResolveItem(<string path>)

<string path>就像sitecore能够为您生成的任何本地路径(或相对URL)一样。当使用显示名称值而不是项目名称时(可能是使用多语言站点的情况),从数据库中实际检索相应的Item非常方便。

在我的情况下,我使用它来显示有效的面包屑,其中父路径确实添加了上下文语言版本,但是请求的页面没有要呈现的上下文版本。 Sitecore.Context.Database.GetItem(<string path>)无法解析基于显示名称的路径,而ResolveItem方法却...在这种情况下搜索了一天以寻找好的答案。

现在在问我自己,为什么这用得不多...? 对于带有一棵大树的网站,这可能是一个昂贵的查询。这是您需要考虑的事情。