Wie kann ich die Ausgabe einer Aktionsmethode zwischenspeichern, die ein Bild an die Ansicht in asp.net mvc zurückgibt?

Ich habe bereits viele Posts zum Thema Caching gelesen, aber keine entspricht genau meinen Anforderungen. In meiner MVC 3-App habe ich eine Aktionsmethode GetImage (), die eine Datei vom Bildtyp zurückgibt. Dann verwende ich diese Methode in einer Ansicht, um Bild anzuzeigen:

<img width="75" height="75" src="@Url.Action("GetImage", "Store", new {productId = item.ProductId})"/>

Ich möchte Bilder auf einem Server zwischenspeichern. Also, was ich schon ausprobiert habe:

1) OutputCacheAttribute verwenden:

    [HttpGet, OutputCache(Duration = 10, VaryByParam = "productId", Location = OutputCacheLocation.Server, NoStore = true)]
    public FileContentResult GetImage(int productId)
    {
        var p = _productRepository.GetProduct(productId);
        if (p != null)
        {
            if (System.IO.File.Exists(GetFullProductImagePath(productId)))
            {
                var image = Image.FromFile(GetFullProductImagePath(productId));
                return File(GetFileContents(image), "image/jpeg");
            }
        }
        var defaultPath = AppDomain.CurrentDomain.BaseDirectory +
                             ConfigurationManager.AppSettings["default-images-directory"];

        var defaultImage = Image.FromFile(Path.Combine(defaultPath, "DefaultProductImage.jpg"));
        return File(GetFileContents(defaultImage), "image/jpeg");
    }

Bilder werden nicht zwischengespeichert (ich erhalte den Status: 200 OK)

2) Verwenden der folgenden Response.Cache-Methoden in einer GetImage () -Methode:

    public FileContentResult GetImage(int productId)
    {
        Response.Cache.SetCacheability(HttpCacheability.Public);
        Response.Cache.SetMaxAge(new TimeSpan(0, 0, 0, 10));
        Response.Cache.SetExpires(DateTime.Now.Add(new TimeSpan(0, 0, 0, 10)));
        Response.Cache.AppendCacheExtension("must-revalidate, proxy-revalidate");        
        // other code is the same
    }

Bilder werden nicht zwischengespeichert

3) Hier bekomme ich: 304 Nicht geändert, aber die Methode GetImage () gibt nichts zurück (leeres Bild)

    public FileContentResult GetImage(int productId)
    {
        Response.StatusCode = 304;
        Response.StatusDescription = "Not Modified";
        Response.AddHeader("Content-Length", "0");     
        // other code is the same
    }

Frage: Wie kann die Ausgabe dieser Aktionsmethode auf einem Server zwischengespeichert werden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage