غیرفعال کردن کش مرورگر در MVC
برای غیرفعال کردن کش یک صفحه در ASP.NET MVC و از کار انداختن دکمه back می‌توان از فیلترها جهت کپسوله کردن یک سری کدهای تکراری که باید در حین اجرای یک اکشن متد فراخوانی شوند استفاده کرد:
   public class NoBrowserCacheAttribute : ActionFilterAttribute
   {
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            filterContext.HttpContext.DisableBrowserCache();
            base.OnResultExecuting(filterContext);
        }
   }

    public static class CacheManager
    {
        public static void DisableBrowserCache(this HttpContextBase httpContext)
        {
            httpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
            httpContext.Response.Cache.SetValidUntilExpires(false);
            httpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
            httpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            httpContext.Response.Cache.SetNoStore();
        }
    }
در اینجا یک فیلتر سفارشی را جهت تنظیم کش صفحه به حالتی که توسط مرورگر ذخیره نشود، طراحی کرده‌ایم.
از این پس، استفاده از آن در مواقع نیاز و تنها در صفحات و Viewهایی که باید اینگونه رفتار کنند، به نحو زیر خواهد بود:
    [HttpGet]
    [NoBrowserCache]
    public virtual ActionResult Index(string name)

  • #
    ‫۶ سال و ۷ ماه قبل، جمعه ۲۷ بهمن ۱۳۹۶، ساعت ۰۴:۳۷
    معادل این مطلب برای ASP.NET Core

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.Extensions.Primitives;
    using Microsoft.Net.Http.Headers;
    
    namespace ASPNETCoreIdentitySample.Common.WebToolkit
    {
        public class NoBrowserCacheAttribute : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                filterContext.HttpContext.DisableBrowserCache();
                base.OnResultExecuting(filterContext);
            }
        }
    
        public static class CacheManager
        {
            public static void DisableBrowserCache(this HttpContext httpContext)
            {
                // Note: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware
                // The Antiforgery system for generating secure tokens to prevent Cross-Site Request Forgery (CSRF)
                // attacks sets the Cache-Control and Pragma headers to no-cache so that responses aren't cached.
                // More info:
                // https://github.com/aspnet/Antiforgery/blob/dev/src/Microsoft.AspNetCore.Antiforgery/Internal/DefaultAntiforgery.cs#L381
                // https://github.com/aspnet/Antiforgery/issues/116
                // So ... the following settings won't work for the pages with normal forms with default settings.
                httpContext.Response.Headers[HeaderNames.CacheControl] =
                              new StringValues(new[] { "no-cache", "max-age=0", "must-revalidate", "no-store" });
                httpContext.Response.Headers[HeaderNames.Expires] = "-1";
                httpContext.Response.Headers[HeaderNames.Pragma] = "no-cache";
            }
        }
    }
  • #
    ‫۶ سال و ۵ ماه قبل، چهارشنبه ۲۹ فروردین ۱۳۹۷، ساعت ۱۸:۳۲
    معادل این مطلب در برنامه‌های ASP.NET Core

    ابتدا بسته‌ی نیوگت DNTCommon.Web.Core را نصب کنید:
    PM> Install-Package DNTCommon.Web.Core
    سپس مثالی از NoBrowserCache آن‌را در اینجا می‌توانید مشاهده کنید.