public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments virtualPathArguments) { var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments); if (!ExternalReview.IsInExternalReviewContext || virtualPathData == null) { return(virtualPathData); } var content = _contentLoader.Get <IContent>(contentLink); if (ExternalReview.IsInProjectReviewContext) { if (content is PageData data) { var virtualPath = GetAccessibleVirtualPath(virtualPathData, data, language); virtualPathData.VirtualPath = AppendGeneratedPostfix(virtualPath); } } if (content is ImageData imageData) { virtualPathData.VirtualPath = $"/{ImageProxyExtensions.ImageProxyRoute}?token={ExternalReview.Token}&contentLink={imageData.ContentLink}"; } return(virtualPathData); }
private static bool IsDefaultContextActive(VirtualPathArguments args) { // VirtualPathArguments.ContextMode can contain incorrect values, so also // check if RequestSegmentContext.CurrentContextMode is Default. // This handles all the valid use cases in edit and preview modes. return (RequestSegmentContext.CurrentContextMode == ContextMode.Default) && (args == null || args.ContextMode == ContextMode.Default || args.ContextMode == ContextMode.Undefined); }
private static bool IsDefaultContextActive(VirtualPathArguments args) { // VirtualPathArguments.ContextMode can contain incorrect values, so also // check if RequestSegmentContext.CurrentContextMode is Default. // This handles all the valid use cases in edit and preview modes. return((RequestSegmentContext.CurrentContextMode == ContextMode.Default) && (args == null || args.ContextMode == ContextMode.Default || args.ContextMode == ContextMode.Undefined)); }
private string GetContentUrl(ContentReference contentReference, string language, bool validateTemplate = true) { var arguments = new VirtualPathArguments { ValidateTemplate = validateTemplate }; return(UrlResolver.Service.GetVirtualPath(contentReference, language, arguments)?.VirtualPath); }
private bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args) { // "DataFactoryCache.Version" key must exists in the cache. Otherwise the entries are not cached. // The key is removed when a remote server content is updated. // Version call ensures that the key is present var version = _cacheVersion.Version; // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode return(HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args)); }
private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args) { // Default to PreferredCulture when explicit value is empty var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name; // URLs are startpage relative var startPageLink = ContentReference.StartPage ?? PageReference.EmptyReference; var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{startPageLink}/{contentLink}"; // RouteValues contain segments for partial routers. These must be included in the key if (args?.RouteValues != null && args.RouteValues.Any()) { key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value)); } return key; }
public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments virtualPathArguments) { var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments); if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || virtualPathData == null) { return(virtualPathData); } var content = _contentLoader.Get <IContent>(contentLink); if (content is PageData) { virtualPathData.VirtualPath += $"{_externalReviewOptions.Service.ContentPreviewUrl}/{ExternalReview.Token}?{PreviewGenerated}=true"; } return(virtualPathData); }
public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments virtualPathArguments) { var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments); if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || virtualPathData == null) { return(virtualPathData); } var content = _contentLoader.Get <IContent>(contentLink); if (content is PageData) { virtualPathData.VirtualPath = AppendGeneratedPostfix(virtualPathData.VirtualPath); } return(virtualPathData); }
public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments args) { if (IgnoreCache(contentLink, args)) { return base.GetVirtualPath(contentLink, language, args); } var cachekey = CreateCacheKey(contentLink, language, args); var value = _cache.Get(cachekey) as VirtualPathData; if (value == null) { value = base.GetVirtualPath(contentLink, language, args); if (value != null) { _cache.Insert(cachekey, value, CreateCacheEvictionPolicy()); } } return value; }
public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments) { var url = _defaultUrlResolver.GetUrl(urlBuilderWithInternalUrl, arguments); if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || url == null) { return(url); } var linkMap = _permanentLinkMapper.Find(urlBuilderWithInternalUrl); if (linkMap != null) { var content = _contentLoader.Get <IContent>(linkMap.ContentReference); if (content is PageData) { return(AppendGeneratedPostfix(url)); } } return(url); }
private static string ExternalUrl(ContentReference contentLink, CultureInfo language) { // Borrowed from Henrik: http://stackoverflow.com/a/29934595/703921 var virtualPathArguments = new VirtualPathArguments { ForceCanonical = true }; var urlString = UrlResolver.Current.GetUrl(contentLink, language.Name, virtualPathArguments); if (string.IsNullOrEmpty(urlString) || HttpContext.Current == null) { return(urlString); } var uri = new Uri(urlString, UriKind.RelativeOrAbsolute); if (uri.IsAbsoluteUri) { return(urlString); } return(new Uri(HttpContext.Current.Request.Url, uri).ToString()); }
private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args) { // Default to PreferredCulture when explicit value is empty var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name; // URLs are host name relative. A single site can have multiple host names defined. var host = HttpContext.Current.Request.Url.Host; var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{host}/{contentLink}"; // RouteValues contain segments for partial routers. These must be included in the key if (args?.RouteValues != null && args.RouteValues.Any()) { key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value)); } return(key); }
private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args) { // Default to PreferredCulture when explicit value is empty var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name; // URLs are startpage relative var startPageLink = ContentReference.StartPage ?? PageReference.EmptyReference; var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{startPageLink}/{contentLink}"; // RouteValues contain segments for partial routers. These must be included in the key if (args?.RouteValues != null && args.RouteValues.Any()) { key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value)); } return(key); }
public override VirtualPathData GetVirtualPathForNonContent(object partialRoutedObject, string language, VirtualPathArguments virtualPathArguments) { throw new NotImplementedException(); }
public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments args) { if (IgnoreCache(contentLink, args)) { return(base.GetVirtualPath(contentLink, language, args)); } var cachekey = CreateCacheKey(contentLink, language, args); var value = _cache.Get(cachekey) as VirtualPathData; if (value == null) { value = base.GetVirtualPath(contentLink, language, args); if (value != null) { var masterCacheKey = CreateMasterCacheKey(contentLink); _cache.Insert(cachekey, value, CreateCacheEvictionPolicy(masterCacheKey)); } } return(value); }
public override VirtualPathData GetVirtualPathForNonContent(object partialRoutedObject, string language, VirtualPathArguments virtualPathArguments) { return(_defaultUrlResolver.GetVirtualPathForNonContent(partialRoutedObject, language, virtualPathArguments)); }
protected override VirtualPathData GetVirtualPathInternal(ContentReference contentLink, string language, VirtualPathArguments arguments) { throw new NotImplementedException(); }
public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments) { return(urlBuilderWithInternalUrl.Path); }
public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments) { return(_defaultUrlResolver.GetUrl(urlBuilderWithInternalUrl, arguments)); }
private static bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args) { // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode return HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args); }
private static bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args) { // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode return(HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args)); }