2012-12-11 8 views
5

私が構築しているサイトでは、refererを使用してAJAXリクエストが正しいURLから来ていることを確認しようとしています。SitecoreのURLに一致する商品を取得します

これを行うには、SitecoreにアイテムのURLを解決させたいと思います。例えば、

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

はパス

sitecore/Content/MySite/Home/abc/def

でアイテムに解決される可能性があります私のコードでこれについて移動するための推奨方法は何ですか?

答えて

1

で項目sitecore/content/MySite/Home/abc/defを解決したい場合は、<site>を次のように設定する必要があります:AJAXリクエストなどであなたがしたいことを実際には得られません。あなたはそれの(フル)パスに基づいて項目を解決する方法ItemManager.GetItem(itemPath, language, version, database, securityCheck)を使用することができます

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

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

多言語システムの場合、これはうまくいかない場合があります。 ?? – theusguy

+0

仮想フォルダにハイフン( ' - ')があるので、パスの先頭にある仮想フォルダのチェックの後、 'DecodeName'への呼び出しを移動する必要がありました。 @theusguy URLから抽出した場合(または、あなたがsc_langクッキーから読み込んだ場合)、GetItemを言語で呼び出すこともできます。 –

関連する問題