2012-12-11 8 views
5

W witrynie, którą buduję, próbuję użyć referer, aby sprawdzić, czy żądania AJAX pochodzą z prawidłowych adresów URL.Zdobądź przedmiot pasujący do adresu URL w Sitecore

Aby to zrobić, chcę uzyskać Sitecore, aby rozwiązać adres URL przedmiotu. Na przykład,

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

może rozwiązać do elementu na ścieżce

sitecore/Content/MySite/Home/abc/def

Jaki jest zalecany sposób, aby przejść na ten temat w moim kodu?

Odpowiedz

1

Czy naprawdę nie dostać to, co próbujesz zrobić (z żądania AJAX i takie), ale jeśli chcesz http://www.mysite.com/abc/def rozwiązać przedmiot sitecore/content/MySite/Home/abc/def, trzeba skonfigurować <site> w web.config tak:

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

można użyć metody ItemManager.GetItem(itemPath, language, version, database, securityCheck) Aby rozwiązać element oparty na to (pełne) ścieżka.

6

Dziękuję za wszystkie odpowiedzi, ale żaden z nich nie zrobił wszystkiego, co było mi potrzebne. To działało dla mnie.

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

Może to nie działać poprawnie w przypadku systemu wielojęzycznego. ?? – theusguy

+0

Ponieważ miałem łącznik ('-') w moim folderze wirtualnym, musiałem przenieść wywołanie do' DecodeName' po sprawdzeniu folderu wirtualnego na początku ścieżki. @theusguy Możesz również wywołać GetItem z językiem, jeśli wyodrębniłeś go również z adresu URL (lub przeczytałeś go z pliku cookie programu sc_lang). –