public static string ContentExternalUrl(ContentReference contentLink, CultureInfo contentLanguage, bool absoluteUrl) { var result = ServiceLocator.Current.GetInstance <UrlResolver>().GetUrl( contentLink, contentLanguage.Name, new VirtualPathArguments { ContextMode = ContextMode.Default, ForceCanonical = absoluteUrl }); if (absoluteUrl) { Uri relativeUri; if (Uri.TryCreate(result, UriKind.RelativeOrAbsolute, out relativeUri)) { if (!relativeUri.IsAbsoluteUri) { var siteDefinitionResolver = ServiceLocator.Current.GetInstance <ISiteDefinitionResolver>(); var siteDefinition = siteDefinitionResolver.GetByContent(contentLink, true, true); var hosts = siteDefinition.GetHosts(contentLanguage, true).ToList(); var host = hosts.FirstOrDefault(h => h.Type == HostDefinitionType.Primary) ?? hosts.FirstOrDefault(h => h.Type == HostDefinitionType.Undefined); var basetUri = siteDefinition.SiteUrl; if (host != null && host.Name.Equals("*") == false) { Uri.TryCreate(siteDefinition.SiteUrl.Scheme + "://" + host.Name, UriKind.Absolute, out basetUri); } var absoluteUri = new Uri(basetUri, relativeUri); return absoluteUri.AbsoluteUri; } } } return result; }
OR:
public static string ExternalUrl(this ContentReference contentLink) { var locator = ServiceLocator.Current.GetInstance<IContentLoader>(); var pd = locator.Get<PageData>(contentLink); var urlString = UrlResolver.Current.GetUrl(contentLink, ((ILocalizable) pd).Language.Name, new VirtualPathArguments { ForceCanonical = true }); if (string.IsNullOrEmpty(urlString)) { return urlString; } var uri = new Uri(urlString, UriKind.RelativeOrAbsolute); if (uri.IsAbsoluteUri) { return urlString; } if (!uri.IsAbsoluteUri) { var siteDefResolver = ServiceLocator.Current.GetInstance<ISiteDefinitionResolver>(); SiteDefinition siteDefinition = siteDefResolver.GetByContent( contentLink: contentLink, fallbackToWildcard: true, fallbackToEmpty: true); return new Uri(siteDefinition.SiteUrl, uri).ToString(); } return urlString; }
No comments:
Post a Comment