Como faço para aplicar o atributo OutputCache em um método em um projeto vNext?

votos
9

O que é a maneira correta de usar o seguinte em um aplicativo vNext em um método assíncrono:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = *)]

Eu vejo isso faz parte do System.Web.Caching, mas o único lugar que eu poderia acrescentar que seria na aspnet50 - seção do meu arquivo project.json, o que é incorreto> frameworkAssemblies.

Publicado 04/12/2014 em 21:14
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

Atualização
Como AndersNS era uma espécie de salientar, que estará disponível no RC1 mais provável: https://github.com/aspnet/Mvc/issues/536 .

Para colocá-lo simplesmente não existe OutputCacheou o equivalente em ASP.NET 5atualmente.

No entanto, note que OutputCacheé apenas um atributo com a lógica mínimo que fala com um provedor de cache. Você pode facilmente implementar seu próprio tal attribute, utilizando Memory Cache, por exemplo. Ou você pode usar soluções de terceiros.

Estou certo de que, quando ASP.NET 5será lançado haverá uma abundância de soluções fora do mercado. E eu tenho certeza que teremos um funcionário OutputCacheequivalente também.

Aqui está o básico MemoryCachede uso no caso de alguém acha útil

MemoryCache cache = MemoryCache.Default;
string cacheName = "MyCache";

if (cache.Contains(cacheName) == false || cache[cacheName] == null)
{
    var data = ... get data

    cache.Set(cacheName, data, new CacheItemPolicy() { SlidingExpiration = DateTime.Now.AddDays(1).TimeOfDay });
}

return cache[cacheName];
Respondeu 05/12/2014 em 07:47
fonte usuário

votos
21

ASP.NET Núcleo 1.1 / 2.0 Resposta

Adicione a resposta cache middleware assim:

public void Configure(IApplicationBuilder application)
{
    application
        .UseResponseCaching()
        .UseMvc();
}

Este conteúdo caches de middleware baseado nos cabeçalhos HTTP de cache que você definiu em sua resposta. Você pode dar uma olhada no resto da resposta para ver como usar ResponseCache.

ASP.NET Núcleo 1.0 Resposta

Use o novo ResponseCacheatributo em vez disso. ResponseCachenão é um substituto direto de OutputCachecomo ele só controla cliente e proxy cache usando o cabeçalho HTTP Cache-Control.

Se você quiser usar o cache do lado do servidor, consulte esta pergunta StackOverflow discutir como usar IMemoryCacheou IDistributedCache.

// Add this to your controller action.
[ResponseCache(Duration = 3600)]

Aqui está um exemplo usando os novos perfis de cache:

// Add this to your controller action.
[ResponseCache(CacheProfile="Cache1Hour")]

// Add this in Startup.cs
services.AddMvc(options =>
{
    options.CacheProfiles.Add(
        new CacheProfile() 
        {
             Name = "Cache1Hour",
             Duration = 3600,
             VaryByHeader = "Accept"
        });
});

gotchas

O middleware de cache resposta pára de funcionar em uma variedade de situações que você pode aprender mais sobre nos docs . Os dois mais comuns que você provavelmente vai bater são de que ele pára de funcionar se ele vê um Authorizationou Set-Cookiecabeçalho HTTP.

Bonus Comentário

Em ASP.NET 4.6, que poderia representar perfis de cache no web.config e alterar as configurações sem recompilar o código. Para mais informações sobre como você pode mover os perfis de cache para o novo config.json, ao invés de codificação que é difícil em Startup.cs ver esta questão.

Respondeu 25/06/2015 em 15:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more