Estou procurando um método para desativar o cache do navegador de um site inteiro do ASP.NET MVC
Encontrei o seguinte método:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
E também um método de meta tag (não funcionará para mim, pois algumas ações do MVC enviam HTML / JSON parcial através do Ajax, sem cabeçalho, meta tag).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Mas estou procurando um método simples para desativar o cache do navegador de um site inteiro.
asp.net
asp.net-mvc
caching
browser-cache
Palani
fonte
fonte
Respostas:
Todas as solicitações são roteadas através do default.aspx primeiro - portanto, supondo que você possa apenas inserir o código por trás dele.
fonte
Crie uma classe que herda de IActionFilter.
Em seguida, coloque atributos onde necessário ...
fonte
if (filterContext.IsChildAction) return;
na parte superior - isso impedirá que a ação externa seja 'sem cache' se chamar uma ação filho decorada comNoCache
atributo. Em outras palavras, oNoCache
atributo não vazará para outras ações se eles executarem ações filho. Além disso, o nome da classe deve estarNoCacheAttribute
em conformidade com a convenção de nomenclatura geralmente aceita para atributos.Em vez de criar o seu próprio, basta usar o que é fornecido para você.
Como mencionado anteriormente, não desative o cache para tudo. Por exemplo, os scripts jQuery usados muito no ASP.NET MVC devem ser armazenados em cache. Na verdade, idealmente, você deveria usar uma CDN para eles, mas meu argumento é que algum conteúdo deve ser armazenado em cache.
O que eu acho que funciona melhor aqui, em vez de espalhar o [OutputCache] em todos os lugares, é usar uma classe:
Todos os seus controladores para os quais você deseja desativar o cache herdarão deste controlador.
Se você precisar substituir os padrões na classe NoCacheController, basta especificar as configurações de cache no seu método de ação e as configurações no seu método Action terão precedência.
fonte
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
no nível da turma, não pode ter PartialViews na sua turma.Convém desativar o cache do navegador para todas as páginas renderizadas pelos controladores (ou seja, páginas HTML), mas mantenha o cache no local para recursos como scripts, folhas de estilo e imagens . Se você estiver usando o pacote MVC4 + e a minificação, manterá as durações padrão do cache para scripts e folhas de estilo (durações muito longas, pois o cache é invalidado com base em uma alteração em um URL exclusivo, não no tempo).
No MVC4 +, para desativar o cache do navegador em todos os controladores, mas retê-lo para qualquer coisa que não seja atendida por um controlador, adicione isto a
FilterConfig.RegisterGlobalFilters
:Defina da
DisableCache
seguinte maneira:fonte
Sei que esta resposta não está 100% relacionada à pergunta, mas pode ajudar alguém.
Se você deseja desabilitar o cache do navegador para todo o site ASP.NET MVC , mas deseja fazer isso TEMPORARIAMENTE, é melhor desabilitar o cache no navegador.
fonte
Eu implementei todas as respostas anteriores e ainda tinha uma visão que não funcionava corretamente.
Descobriu-se que o nome da visualização com a qual eu estava tendo o problema foi chamado de 'Recente'. Aparentemente, isso confundiu o navegador Internet Explorer.
Depois de alterar o nome da exibição (no controlador) para um nome diferente (eu escolhi 'Recente5'), as soluções acima começaram a funcionar.
fonte
Você pode tentar o código abaixo no arquivo Global.asax.
fonte
UI
fundo
fonte