private bool ShouldUseOutputCache(ControllerContext controllerContext) { var routedContentLink = _contentRouteHelperAccessor().ContentLink; return(OutputCacheHandler.UseOutputCache(controllerContext.HttpContext.User, controllerContext.HttpContext, _duration) && !controllerContext.IsChildAction && !ContentReference.IsNullOrEmpty(routedContentLink)); }
public override void OnResultExecuted(ResultExecutedContext filterContext) { base.OnResultExecuted(filterContext); if (OutputCacheHandler.UseOutputCache(filterContext.HttpContext.User, filterContext.HttpContext, new TimeSpan(0, 0, Duration))) { var contentRenderingContext = filterContext.HttpContext.GetTrackingContext(); if (!contentRenderingContext.UsesPersonalizationOrQuery) { AddDepedenciesToCache(filterContext.HttpContext); } var state = new ValidationState(contentRenderingContext.UsesPersonalizationOrQuery, ConfigurationSettings.Service); filterContext.HttpContext.Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(ValidateOutputCache), state); } }
public override void OnResultExecuting(ResultExecutingContext filterContext) { if (Disable) { return; } if (!_initialized) { //If no values are set on attrbute take default values from config if (Duration == 0) { Duration = Convert.ToInt32(ConfigurationSettings.Service.HttpCacheExpiration.TotalSeconds); } if (String.IsNullOrEmpty(VaryByCustom)) { VaryByCustom = ConfigurationSettings.Service.HttpCacheVaryByCustom; } _initialized = true; } var contentLink = filterContext.RequestContext.GetContentLink(); if (!ContentReference.IsNullOrEmpty(contentLink)) { var versionable = ContentLoader.Service.Get <IContent>(contentLink) as IVersionable; if (versionable != null && versionable.StopPublish.HasValue) { DateTime now = DateTime.Now; if (versionable.StopPublish < now) { return; } if (versionable.StopPublish.Value < now.AddSeconds(Duration)) { Duration = Convert.ToInt32((versionable.StopPublish.Value - now).TotalSeconds); } } if (OutputCacheHandler.UseOutputCache(filterContext.HttpContext.User, filterContext.HttpContext, new TimeSpan(0, 0, Duration))) { base.OnResultExecuting(filterContext); } } }
public static void ValidateOutputCache(HttpContext context, object data, ref HttpValidationStatus validationStatus) { var httpContextBase = new HttpContextWrapper(context); var state = data as ValidationState; if (state.UsesPersonalizationOrQuery || context.Cache[context.Request.RawUrl] == null) { validationStatus = HttpValidationStatus.Invalid; } else if (!OutputCacheHandler.UseOutputCache(context.User, httpContextBase, state.Settings.HttpCacheExpiration)) { validationStatus = HttpValidationStatus.IgnoreThisRequest; } else { validationStatus = HttpValidationStatus.Valid; } }