Wyłącz pamięć podręczną przeglądarki dla całego ASP.NET strona www

Szukam metody wyłączenia pamięci podręcznej przeglądarki dla całego ASP.NET strona MVC

Znalazłem następującą metodę:

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();

A także Meta tag (dla mnie to nie zadziała, ponieważ niektóre akcje MVC wysyłają częściowy HTML / JSON przez Ajax, bez głowicy, meta tag).

<meta http-equiv="PRAGMA" content="NO-CACHE">

Ale szukam prostej metody, aby wyłączyć pamięć podręczną przeglądarki dla całej witryny.

Author: Md. Alamin Mahamud, 2009-07-21

8 answers

HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();

Wszystkie żądania są kierowane domyślnie.aspx po pierwsze-więc zakładając, że możesz po prostu wpisać kod z tyłu.

 92
Author: Squiggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 05:15:40

Utwórz klasę, która dziedziczy z IActionFilter.

public class NoCacheAttribute : ActionFilterAttribute
{  
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

Następnie umieść atrybuty w razie potrzeby...

[NoCache]
[HandleError]
public class AccountController : Controller
{
    [NoCache]
    [Authorize]
    public ActionResult ChangePassword()
    {
        return View();
    }
}
 365
Author: JKG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-10 16:37:57

Zamiast kręcić własne, po prostu użyj tego, co jest dla Ciebie przewidziane.

Jak wspomniano wcześniej, nie wyłączaj buforowania dla wszystkiego. Na przykład Skrypty jQuery używane w ASP.NET MVC powinien być buforowany. Właściwie najlepiej byłoby użyć CDN dla tych i tak, ale chodzi mi o to, że niektóre treści powinny być buforowane.

To, co uważam za najlepsze tutaj, zamiast posypywać [OutputCache] wszędzie jest użycie klasy:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController  : Controller
{
}

Wszystkie Twoje Kontrolery ty chcesz wyłączyć buforowanie dla NASTĘPNIE dziedziczyć z tego kontrolera.

Jeśli chcesz nadpisać domyślne wartości w klasie NoCacheController, po prostu określ ustawienia pamięci podręcznej w metodzie action, a ustawienia w metodzie Action będą miały pierwszeństwo.

[HttpGet]
[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ViewResult Index()
{
  ...
}
 132
Author: Adam Tuliper - MSFT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 18:47:07

Możesz wyłączyć buforowanie przeglądarki dla wszystkich stron renderowanych przez kontrolery (np. strony HTML), ale zachowaj buforowanie dla zasobów, takich jak skrypty , arkusze stylów i obrazy. Jeśli używasz wiązania i minifikacji MVC4+, będziesz chciał zachować domyślny czas trwania bufora dla skryptów i arkuszy stylów(bardzo długi czas trwania, ponieważ bufor zostaje unieważniony na podstawie zmiany na unikalny adres URL, a nie na podstawie czasu).

W MVC4+, aby wyłączyć buforowanie przeglądarki przez wszystkie kontrolery, ale zachowaj je dla wszystkiego, co nie jest obsługiwane przez kontroler, dodaj to do FilterConfig.RegisterGlobalFilters:

filters.Add(new DisableCache());

Zdefiniuj DisableCache w następujący sposób:

class DisableCache : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}
 10
Author: Edward Brey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-23 14:56:41

Wiem, że ta odpowiedź nie jest w 100% związana z pytaniem, ale może komuś pomóc.

Jeśli chcesz wyłączyć pamięć podręczną przeglądarki dla całego ASP.NET MVC Website, ale chcesz to zrobić tylko tymczasowo, to lepiej wyłączyć pamięć podręczną w przeglądarce.

Oto zrzut ekranu w Chrome

 6
Author: Carlos Martinez T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 18:49:46

Zaimplementowałem wszystkie poprzednie odpowiedzi i nadal miałem jeden widok, który nie działał poprawnie.

Okazało się, że nazwa widoku, z którym miałem problem, nosi nazwę 'Recent'. Najwyraźniej to mylić przeglądarkę Internet Explorer.

Po zmianie nazwy widoku (w kontrolerze) na inną (wybrałem 'Recent5'), powyższe rozwiązania zaczęły działać.

 2
Author: DrHooverCraft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 18:48:52

Możesz wypróbować poniższy kod w trybie globalnym.plik asax.

protected void Application_BeginRequest()
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
    }
 0
Author: NidhinSPradeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 09:19:29

UI

<%@ OutPutCache Location="None"%>
<%
    Response.Buffer = true;
    Response.Expires = -1;
    Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
    Response.CacheControl = "no-cache";
%>

Tło

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Expires = -1;          
Response.Cache.SetNoStore();
 -1
Author: Alpha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 18:50:16