Mam metodę action, która zwraca plik i ma tylko jeden argument (identyfikator).ASP.NET MVC: Utwórz obrazy pamięci podręcznej przeglądarki z działania
np.
public ActionResult Icon(long id)
{
return File(Server.MapPath("~/Content/Images/image" + id + ".png"), "image/png");
}
chcę przeglądarka automatycznie Cache obraz pierwszy raz do niego dostęp, więc następnym razem nie trzeba pobierać wszystkie dane.
Próbowałem używać takich rzeczy jak OutputCacheAttribute i ręczne ustawianie nagłówków odpowiedzi. tj:
[OutputCache(Duration = 360000)]
lub
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(Cache.NoAbsoluteExpiration);
ale obraz nadal jest ładowany za każdym razem uderzę F5 w przeglądarce (Próbuję go na Chrome i IE). (Wiem, że jest ładowany za każdym razem, ponieważ jeśli zmienię obraz, zmieni się również w przeglądarce).
widzę, że odpowiedź HTTP ma kilka nagłówków, które pozornie powinno działać:
Cache-Control: Miejski, max-age = 360000
Content-Length: 39317
Content Type: image/png
Data: Tue, 31 stycznia 2012 23:20:57 GMT
Wygasa: Sun, 05 lut 2012 03:20:56 GMT
Last-Modified: Tue, 31 stycznia 2012 23:20:56 GMT
Ale nagłówki żądania mieć to:
Pragma: no-cache
Każdy pomysł, jak to zrobić?
dziękuję
dziękuję, właśnie to, czego szukasz. Wydaje się to jednak trochę skomplikowane, czy nie powinien istnieć "bardziej standardowy" sposób robienia tego przy użyciu ASP.NET MVC? Jak metoda, która otrzyma odpowiedź i najnowszą modyfikację i odpowiednio ją obsłuży? (Tak właśnie bym zrobił, ale nie sądzę, że jestem pierwszą osobą, która o tym myśli). – willvv
Zawsze używałem własnego HttpHandler - więc nie trzeba używać MVC, ale nie oznacza to, że można to zrobić w ten sposób - po prostu nie wiesz, która metoda działa lepiej? Mogę polecić spojrzenie na http://imageresizing.net/, który jest świetnym, małym komponentem, który może obsłużyć wszystko dla ciebie i nie tylko! – brodie
Problem polega na tym, że moje obrazy są przechowywane w bazie danych i mogą być modyfikowane zewnętrznie, dlatego obsługa HTTP nie wydaje się być opcją. – willvv