Hvordan kan jeg bruke OutputCache attributt på en metode i en vNext prosjekt?

stemmer
10

Hva er den riktige måten å bruke følgende i en vNext program på en asynkron metode:

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

Jeg ser det er en del av System.Web.Caching, men det eneste stedet jeg kunne legge det ville være i aspnet50 -> frameworkAssemblies delen av min project.json fil, som er feil.

Publisert på 04/12/2014 klokken 21:14
kilden bruker
På andre språk...                            


2 svar

stemmer
22

ASP.NET kjerne 1.1 / 2.0 Svar

Legg responsen caching mellomvare som så:

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

Dette mellomvare cacher innhold basert på caching HTTP-hoder du angir i svaret ditt. Du kan ta en titt på resten av svaret for å se hvordan du skal bruke ResponseCache.

ASP.NET Kjerne 1,0 Svar

Bruk den nye ResponseCacheattributt i stedet. ResponseCacheer ikke en direkte erstatning av OutputCachesom det bare styrer klient og proxy caching ved hjelp av Bufferkontroll HTTP-header.

Hvis du ønsker å bruke server side caching, se denne Stackoverflow spørsmålet diskuterer hvordan de skal bruke IMemoryCacheeller IDistributedCache.

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

Her er et eksempel med de nye hurtigbuffer profiler:

// 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

Responsen caching mellomvare slutter å fungere i en rekke situasjoner som du kan lære mer om i docs . To vanlige de vil du sannsynligvis treffe er at den slutter å fungere hvis den ser en Authorizationeller Set-CookieHTTP-header.

bonus Kommentar

I ASP.NET 4.6, kan vi representere cache profiler i web.config og endre innstillingene uten rekompileres kode. For mer informasjon om hvordan du kan flytte cache profilene til den nye config.json, snarere enn hardt koding det i Startup.cs se dette spørsmålet.

Svarte 25/06/2015 kl. 15:18
kilden bruker

stemmer
7

Oppdater
Som AndersNS var snill å påpeke, det vil være tilgjengelig i RC1 mest sannsynlig: https://github.com/aspnet/Mvc/issues/536 .

For å si det enkelt er det ikke OutputCache, eller tilsvarende i ASP.NET 5øyeblikket.

Vær imidlertid oppmerksom på at OutputCachebare en egenskap med minimal logikk som snakker til en cache-leverandør. Du kan enkelt implementere din egen slik attribute, ved hjelp av Memory Cachefor eksempel. Eller du kan bruke tredjeparts løsninger.

Jeg er sikker på at når ASP.NET 5vil skipet vil det være nok av løsninger ute på markedet. Og jeg er ganske sikker på at vi vil ha en offisiell OutputCachetilsvarende også.

Her er den grunnleggende MemoryCachebruk i tilfelle noen finner det nyttig

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];
Svarte 05/12/2014 kl. 07:47
kilden bruker

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