Ho un metodo di azione che restituisce un file e ha un solo argomento (un id).ASP.NET MVC: rende le immagini della cache del browser dall'azione
ad es.
public ActionResult Icon(long id)
{
return File(Server.MapPath("~/Content/Images/image" + id + ".png"), "image/png");
}
Voglio il browser di memorizzare nella cache automaticamente questa immagine la prima volta che accedo così la prossima volta che non ha bisogno di scaricare tutti i dati.
Ho provato a utilizzare cose come OutputCacheAttribute e ad impostare manualmente le intestazioni sulla risposta. cioè:
[OutputCache(Duration = 360000)]
o
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(Cache.NoAbsoluteExpiration);
Ma l'immagine è ancora caricato ogni volta che mi ha colpito F5 sul browser (che sto cercando su Chrome e IE). (So che viene caricato ogni volta perché se cambio l'immagine cambia anche nel browser).
vedo che la risposta HTTP ha alcune intestazioni che a quanto pare dovrebbe funzionare:
Cache-Control: max-age pubblico = 360000
Content-Length: 39317
Content- tipo: image/png
Data: martedì, 31 gennaio 2012 23:20:57 GMT
Scadenza: Sun, 5 febbraio 2012 03:20:56 GMT
Last-Modified: Mar 31 Gen 2012 23:20:56 GMT
Ma le intestazioni di richiesta hanno questo:
Pragma: no-cache
Qualche idea su come fare questo?
Grazie mille
Grazie mille, proprio quello che stavo cercando. Sembra un po 'complicato, però, non dovrebbe esserci un modo "più standard" di farlo usando ASP.NET MVC? Come un metodo che riceverebbe la risposta e l'ultima modifica e gestirla di conseguenza? (Questo è quello che farei, ma non penso di essere il primo a pensarci). – willvv
Ho sempre usato il mio HttpHandler - quindi non c'è bisogno di usare MVC, ma non significa che possa essere fatto in questo modo - semplicemente non è sicuro quale sia il modo migliore di comportarsi? Posso consigliare di guardare http://imageresizing.net/ che è un piccolo grande componente in grado di gestire tutto per te e altro ancora! – brodie
Il problema è che le mie immagini sono memorizzate nel database e possono essere modificate esternamente, quindi un gestore HTTP non sembra un'opzione. – willvv