获取与Sitecore中的URL匹配的项

获取与Sitecore中的URL匹配的项,sitecore,Sitecore,在我正在构建的站点中,我尝试使用referer来验证AJAX请求是否来自正确的url 为此,我想让Sitecore解析项目的URL。比如说, http://www.mysite.com/abc/def 可能解析为路径处的项 sitecore/Content/MySite/Home/abc/def 在我的代码中,有什么推荐的方法可以做到这一点呢?如果你想http://www.mysite.com/abc/def要解析项目sitecore/content/MySite/Home/abc/def,您需

在我正在构建的站点中,我尝试使用referer来验证AJAX请求是否来自正确的url

为此,我想让Sitecore解析项目的URL。比如说,

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

可能解析为路径处的项

sitecore/Content/MySite/Home/abc/def


在我的代码中,有什么推荐的方法可以做到这一点呢?

如果你想
http://www.mysite.com/abc/def
要解析项目
sitecore/content/MySite/Home/abc/def
,您需要在web.config中配置
,如下所示:

<site name="MySite" hostName="www.mysite.com" rootPath="/sitecore/content/MySite" startItem="/Home" *other attributes here* />


您可以使用方法
ItemManager.GetItem(itemPath、语言、版本、数据库、securityCheck)
根据项目的(完整)路径解析项目。

感谢您提供的所有答案,但没有一个解决了我需要的所有问题。这对我有用

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

这个答案更适合其他游客提出这个问题。对于Sitecore 8,您可以执行以下操作:

new Sitecore.Data.ItemResolvers.ContentItemPathResolver().ResolveItem(<string path>)
new Sitecore.Data.ItemResolver.ContentItemPathResolver().ResolveItem()
其中
类似于sitecore能够为您生成的任何本地路径(或相对url,如果您愿意)字符串。当使用displayname值而不是项名称时(如果您有多语言站点,则可能是这种情况),这对于从数据库中实际检索相应的
项非常方便

在我的例子中,我使用它来显示一个有效的breadcrumb,其中父路径添加了上下文语言项版本,但请求的页面没有要呈现的上下文语言版本<代码>Sitecore.Context.Database.GetItem()无法解析基于displayname的路径,而ResolveItem方法无法解析。。。花了一天时间寻找这个案子的好答案

现在问我自己,为什么这个没有被广泛使用。。。?
对于一个有一棵大树的网站来说,这可能是一个昂贵的查询。当我在虚拟文件夹中有一个连字符(<代码> -/COD>)时,在检查路径开始时的虚拟文件夹之后,我需要将调用移动到<代码> DEXNOTENAME>代码>。如果你也从URL中提取了GetItem(或者你从Sc_lang cookie中读取了它),你也可以用一种语言调用GetItem。警告:如果作者将显示名称应用于项目,这将不起作用。我认为这是这里唯一正确的答案。解析URL时需要考虑显示名称,无论站点是否使用多语言。