Szukam metody wyłączenia pamięci podręcznej przeglądarki dla całej witryny ASP.NET MVC
Znalazłem następującą metodę:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
A także metoda metatagów (dla mnie nie zadziała, ponieważ niektóre akcje MVC wysyłają częściowy HTML / JSON przez Ajax, bez nagłówka, metatag).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Ale szukam prostej metody wyłączenia pamięci podręcznej przeglądarki dla całej witryny.
asp.net
asp.net-mvc
caching
browser-cache
Palani
źródło
źródło
Odpowiedzi:
Wszystkie żądania są najpierw kierowane przez default.aspx - zakładając, że możesz po prostu wstawić kod.
źródło
Utwórz klasę, która dziedziczy z IActionFilter.
Następnie w razie potrzeby umieść atrybuty ...
źródło
if (filterContext.IsChildAction) return;
u góry - zapobiegnie to, że akcja zewnętrzna nie będzie „buforowana”, jeśli wywoła akcję potomną, która jest ozdobionaNoCache
atrybutem. Innymi słowy,NoCache
atrybut nie wycieknie do innych akcji, jeśli wykonają akcje potomne. Ponadto nazwa klasy powinna byćNoCacheAttribute
zgodna z ogólnie przyjętą konwencją nazewnictwa dla atrybutów.Zamiast tworzyć własne, po prostu użyj tego, co jest dla Ciebie.
Jak wspomniano wcześniej, nie wyłączaj buforowania dla wszystkiego. Na przykład skrypty jQuery często używane w ASP.NET MVC powinny być buforowane. Właściwie idealnie powinieneś używać CDN do tych celów, ale chodzi mi o to, że niektóre treści powinny być buforowane.
To, co według mnie działa najlepiej, zamiast posypywania wszędzie [OutputCache], to użycie klasy:
Wszystkie kontrolery, które chcesz wyłączyć buforowanie, a następnie dziedziczą po tym kontrolerze.
Jeśli chcesz zastąpić wartości domyślne w klasie NoCacheController, po prostu określ ustawienia pamięci podręcznej dla metody akcji, a ustawienia metody akcji będą miały pierwszeństwo.
źródło
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
na poziomie klasy, nie możesz mieć częściowych widoków w swojej klasie.Możesz wyłączyć buforowanie przeglądarki dla wszystkich stron renderowanych przez kontrolery (tj. Strony HTML), ale utrzymuj buforowanie w miejscu dla zasobów takich jak skrypty, arkusze stylów i obrazy . Jeśli używasz pakietowania i minimalizacji MVC4 +, będziesz chciał zachować domyślne czasy trwania pamięci podręcznej dla skryptów i arkuszy stylów (bardzo długi czas trwania, ponieważ pamięć podręczna zostaje unieważniona na podstawie zmiany unikalnego adresu URL, a nie na podstawie czasu).
W MVC4 +, aby wyłączyć buforowanie przeglądarki na wszystkich kontrolerach, ale zachować je dla wszystkiego, co nie jest obsługiwane przez kontroler, dodaj to do
FilterConfig.RegisterGlobalFilters
:Zdefiniuj
DisableCache
w następujący sposób:źródło
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łej witryny ASP.NET MVC , ale chcesz to zrobić TYMCZASOWO, lepiej wyłączyć pamięć podręczną w przeglądarce.
źródło
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, została nazwana „Najnowsze”. Najwyraźniej pomyliło to przeglądarkę Internet Explorer.
Po zmianie nazwy widoku (w kontrolerze) na inną nazwę (wybrałem opcję „Najnowsze5”) powyższe rozwiązania zaczęły działać.
źródło
Możesz wypróbować poniższy kod w pliku Global.asax.
źródło
Interfejs użytkownika
tło
źródło