2015-08-21 3 views
6

In ASP.net 4.5 eravamo abituati ad abilitare le intestazioni di scadenza su risorse statiche (a turno, abilitando il caching del browser) aggiungendo "ClientCache" al web.config, qualcosa come:Come abilitare ClientCache in ASP.NET Core

<staticcontent> 
    <clientcache cachecontrolmode="UseMaxAge" cachecontrolmaxage="365.00:00:00" /> 
</staticcontent> 

Come si fa riferimento in http://madskristensen.net/post/cache-busting-in-aspnet

Come possiamo farlo ora in ASP.net 5 quando non abbiamo web.config e Startup.cs?

risposta

8

In Startup.cs> Configura (IApplicationBuilder ApplicationBuilder, .....)

applicationBuilder.UseStaticFiles(new StaticFileOptions 
{ 
    OnPrepareResponse = context => 
    context.Context.Response.Headers.Add("Cache-Control", "public, max-age=2592000") 
}); 
+0

Questo ha funzionato bene per me! – Sam

1

Se si utilizza MVC è possibile utilizzare lo ResponseCacheAttribute sulle azioni per impostare le intestazioni della cache del client. C'è anche un ResponseCacheFilter che puoi usare.

+1

che va bene per le risorse dinamiche, ma questo è per file statici. –

+1

Il web.config è fino lì e utilizzato per le cose specifiche di IIS se non sbaglio. L'elemento non funziona? – Andreas

+0

Ho appena aggiunto questo come contenuto di web.config alla radice di wwwroot ma non ho ancora scade intestazioni :(... < system.webServer>

1

Che server usi?

  • Se si utilizza IIS è comunque possibile utilizzare web.config nella cartella wwwroot.

  • Se si utilizza il gheppio, non è ancora disponibile una soluzione integrata. Tuttavia è possibile scrivere un middleware che aggiunge l'intestazione specifica del controllo della cache. Oppure usa nginx come proxy inverso.

Middleware:

non testati e proprio in cima alla mia testa si può scrivere qualcosa di simile (!):

public sealed class CacheControlMiddleWare 
{ 
    readonly RequestDelegate _next; 
    public CacheControlMiddleWare(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     if (context.Request.Path.Value.EndsWith(".jpg") 
     { 
      context.Response.Headers.Add("Cache-Control", new[]{"max-age=100"}); 
     } 
     await _next(context); 
    } 
} 

nginx come reverse proxy:

http://mjomaa.com/computer-science/frameworks/asp-net-mvc/141-how-to-combine-nginx-kestrel-for-production-part-i-installation

Oltre a cappello, ho scritto alcune note per il caching di risposta:

http://mjomaa.com/computer-science/frameworks/asp-net-mvc/153-output-response-caching-in-asp-net-5

+0

Ciao Grazie per questo. Puoi dare qualche idea su come collegare questo middleware in startup.cs (il middleware è un nuovo concetto per me) –