Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Can you confirm you are using the [ContentOutputCache] attribute on your controller?
Have you tried removing all your custom code to check things still work as expected in your custom attribute? Also have you tried using the default [ContentOutputCache] attribute? Finally I assume you are testing this on your local machine so do not have any load balancing confuguration to think about.
Hi,
Shouldn't the ContentOutputCache clear the output cache of the page each time the page is published? I am working on CMS verison 11.20.5 and upon publishing the page, I dont see the outputcache being purged for that page.
Below is a small tweak I made to disable/enable the output cache via CMS.
public class CustomContentOutputCacheAttribute : ContentOutputCacheAttribute { public CustomContentOutputCacheAttribute() { this.UseOutputCacheValidator = UseOutputCache; } private static bool UseOutputCache(IPrincipal principal, HttpContextBase context, TimeSpan duration) { var useCache = false; if (!principal.Identity.IsAuthenticated && duration != TimeSpan.Zero) { if (string.Equals(context.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) { useCache = true; var url = context.Request.Url?.ToString(); var content = UrlResolver.Current.Route(new UrlBuilder(url)); if (content is HomesPageBase page) { useCache = page.EnableOutputCache; } } } return useCache; } }
I then decorate the controller with this attribute, the caching is working fine. But the cache doesnt seem to be getting cleared when I publish the page.
[CustomContentOutputCache] public class StartPageController : PageControllerBase<StartPage> { [PageViewTracking] public ActionResult Index(StartPage currentPage) { // load related content var model = PageViewModel.Create(currentPage); // Check if it is the StartPage or just a page of the StartPage type. if (SiteDefinition.Current.StartPage.CompareToIgnoreWorkID(currentPage.ContentLink)) { //Connect the view models logotype property to the start page's to make it editable var editHints = ViewData.GetEditHints<LayoutViewModel, StartPage>(); // header elements editHints.AddConnection(m => m.MainHeader.HeaderLogo, p => p.HeaderLogo); editHints.AddFullRefreshFor(x => x.HeaderLogo); // content elements editHints.AddFullRefreshFor(x => x.CommunityCards); // footer elements editHints.AddConnection(m => m.Footer.FooterColumn1Title, p => p.FooterColumn1Title); editHints.AddConnection(m => m.Footer.FooterColumn2Title, p => p.FooterColumn2Title); editHints.AddConnection(m => m.Footer.FooterColumn3Title, p => p.FooterColumn3Title); editHints.AddFullRefreshFor(x => x.FooterColumn2Links); editHints.AddFullRefreshFor(x => x.FooterColumn3Links); editHints.AddConnection(m => m.Footer.SocialLinkTitle, p => p.SocialLinksTitle); editHints.AddConnection(m => m.Footer.SpecialOffersForm, p => p.SpecialOffersForm); editHints.AddFullRefreshFor(x => x.FooterBottomLinks); editHints.AddConnection(m => m.Footer.FooterCopyright, p => p.FooterCopyright); HttpContext.Response.Cache.SetExpires(DateTime.Now.Add(Settings.Instance.HttpCacheExpiration)); HttpContext.Response.Cache.SetCacheability(Settings.Instance.HttpCacheability); HttpContext.Response.Cache.SetValidUntilExpires(true); } return View(model); } }
Regards,
Sid