There are various blog posts out there that offer different solutions to retrieve the site information for a Sitecore item but the ones that I came across lacked support for multi-site setup where multiple site configurations have the same root path and start item. This is common when your Sitecore solution supports multi-lingual content.
Here is my extension method that caters for multi-lingual, multi-site setups:
public static SiteInfo GetSite(this Item item) { List<SiteInfo> siteInfoList = Factory.GetSiteInfoList(); SiteInfo currentSiteinfo = null; int matchLength = 0; foreach (SiteInfo siteInfo in siteInfoList) { string startPath = string.Concat(siteInfo.RootPath, siteInfo.StartItem); if (item.Paths.FullPath.StartsWith(startPath, StringComparison.OrdinalIgnoreCase) && siteInfo.Language.Equals(item.Language.Name, StringComparison.OrdinalIgnoreCase) && startPath.Length > matchLength) { matchLength = startPath.Length; currentSiteinfo = siteInfo; } } return currentSiteinfo; }
Happy coding!