Tengo un método de acción que devuelve un archivo y tiene solo un argumento (una identificación).ASP.NET MVC: crear imágenes de caché del navegador de la acción
p. Ej.
public ActionResult Icon(long id)
{
return File(Server.MapPath("~/Content/Images/image" + id + ".png"), "image/png");
}
que desea que el navegador almacena en caché de forma automática esta imagen la primera vez que acceder a ella por lo que la próxima vez que no tiene que descargar todos los datos.
He intentado utilizar cosas como OutputCacheAttribute y establecer manualmente los encabezados en la respuesta. es decir:
[OutputCache(Duration = 360000)]
o
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(Cache.NoAbsoluteExpiration);
Pero la imagen fija se carga cada vez que presione F5 en el navegador (Estoy intentando que en Chrome e IE). (Sé que está cargado todo el tiempo porque si cambio la imagen también cambia en el navegador).
veo que la respuesta HTTP tiene algunas cabeceras que aparentemente debería funcionar:
Cache-Control:, max-age = 360000 pública
Content-Length: 39317
Content- tipo: image/png
Fecha: Mar 31 Ene 2012 23:20:57 GMT
Expira: Dom 05 Feb 2012 03:20:56 GMT
-la última actualización: Mar 31 Ene 2012 23:20:56 GMT
Pero las cabeceras de petición tienen esta:
Pragma: no-cache
¿Alguna idea de cómo hacer esto?
Muchas gracias
Muchas gracias, justo lo que estaba buscando. Sin embargo, parece un poco complicado, ¿no debería haber una forma "más estándar" de hacerlo usando ASP.NET MVC? ¿Como un método que recibiría la respuesta y la última modificación y lo manejaría en consecuencia? (Eso es lo que haría, pero no creo que sea la primera persona que piense sobre esto). – willvv
Siempre he usado mi propio HttpHandler, por lo que no es necesario usar MVC, pero eso no significa que se pueda hacer de esa manera, ¿no está seguro de qué manera funciona mejor? Puedo recomendar mirar http://imageresizing.net/, que es un gran pequeño componente que puede manejar todo para usted y más. – brodie
El problema es que mis imágenes se almacenan en la base de datos y pueden modificarse externamente, por lo tanto, un controlador HTTP no parece una opción. – willvv