Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC how to disable automatic caching option?

How to disable automatic browser caching from asp.Net mvc application?

Because I am having a problem with caching as it caches all links. But sometimes it redirected to DEFAULT INDEX PAGE automatically which stored it caching and then all the time I click to that link it will redirect me to DEFAULT INDEX PAGE.

So some one know how to manually disable caching option from ASP.NET MVC 4?

like image 671
Raj Tamakuwala Avatar asked Oct 18 '12 06:10

Raj Tamakuwala


People also ask

What is the property that used to disable the cache storage in ASP.NET MVC?

You can use the OutputCacheAttribute to control server and/or browser caching for specific actions or all actions in a controller.

What is the correct way to apply caching in MVC?

In ASP.NET MVC, there is an OutputCache filter attribute that you can apply and this is the same concept as output caching in web forms. The output cache enables you to cache the content returned by a controller action. Output caching basically allows you to store the output of a particular controller in the memory.

What are the different caching techniques available in .NET MVC?

ASP.NET supports three types of caching: Page Output Caching [Output caching] Page Fragment Caching [Output caching] Data Caching.


2 Answers

You can use the OutputCacheAttribute to control server and/or browser caching for specific actions or all actions in a controller.

Disable for all actions in a controller

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will be applied to all actions in MyController, unless those actions override with their own decoration public class MyController : Controller {   // ...  } 

Disable for a specific action:

public class MyController : Controller {     [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will disable caching for Index only     public ActionResult Index()     {        return View();     } }  

If you want to apply a default caching strategy to all actions in all controllers, you can add a global action filter by editing your global.asax.cs and looking for the RegisterGlobalFilters method. This method is added in the default MVC application project template.

public static void RegisterGlobalFilters(GlobalFilterCollection filters) {     filters.Add(new OutputCacheAttribute                     {                         VaryByParam = "*",                         Duration = 0,                         NoStore = true,                     });     // the rest of your global filters here } 

This will cause it to apply the OutputCacheAttribute specified above to every action, which will disable server and browser caching. You should still be able to override this no-cache by adding OutputCacheAttribute to specific actions and controllers.

like image 91
moribvndvs Avatar answered Oct 11 '22 14:10

moribvndvs


HackedByChinese is missing the point. He mistook server cache with client cache. OutputCacheAttribute controls server cache (IIS http.sys cache), not browsers (clients) cache.

I give you a very small part of my codebase. Use it wisely.

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public sealed class NoCacheAttribute : FilterAttribute, IResultFilter {     public void OnResultExecuting(ResultExecutingContext filterContext)     {     }      public void OnResultExecuted(ResultExecutedContext filterContext)     {         var cache = filterContext.HttpContext.Response.Cache;         cache.SetCacheability(HttpCacheability.NoCache);         cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);         cache.SetExpires(DateTime.Now.AddYears(-5));         cache.AppendCacheExtension("private");         cache.AppendCacheExtension("no-cache=Set-Cookie");         cache.SetProxyMaxAge(TimeSpan.Zero);     } } 

Usage:

/// will be applied to all actions in MyController [NoCache] public class MyController : Controller {     // ...  } 

Use it wisely as it really disables all client cache. The only cache not disabled is the "back button" browser cache. But is seems there is really no way to get around it. Maybe only by using javascript to detect it and force page or page zones refresh.

like image 20
Softlion Avatar answered Oct 11 '22 12:10

Softlion