2011-09-26 106 views
4

我已经创建了一个ashx的文件,以动态生成图像缩略图。我想在第一次调用这些图像后缓存这些图像。缓存ASHX图像响应

网址:

〜/ image.ashx DIR =用户& W = 25 & H = 25 &力= YES & IMG = matt.jpg

代码背后:

public void ProcessRequest (HttpContext context) { 
    TimeSpan refresh = new TimeSpan(0, 15, 0); 
    context.Response.Cache.SetExpires(DateTime.Now.Add(refresh)); 
    context.Response.Cache.SetMaxAge(refresh); 
    context.Response.Cache.SetCacheability(HttpCacheability.Server); 
    context.Response.CacheControl = HttpCacheability.Public.ToString(); 
    context.Response.Cache.SetValidUntilExpires(true); 

    string dir = context.Request.QueryString["dir"]; 
    string img = context.Request.QueryString["img"]; 
    bool force = context.Request.QueryString["force"] == "yes"; 
    double w = 0; 
    double h = 0; 
    ... 
    context.Response.ContentType = "image/jpeg"; 
    thumb.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
} 

使用开发工具在Chrome中我可以看到下面的响应头:

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/10.0.0.0 
Date: Mon, 26 Sep 2011 19:17:31 GMT 
X-AspNet-Version: 4.0.30319 
Set-Cookie: .ASPXAUTH=...; path=/; HttpOnly 
Cache-Control: no-cache 
Pragma: no-cache 
Expires: -1 
Content-Type: image/jpeg 
Content-Length: 902 
Connection: Close 

有人可以告诉我,为什么这是不完全相同的网址多次调用缓存吗?任何提示将非常感谢。

回答

5

当然这行:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server); 

应该是:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); 
+0

谢谢主席先生,我相信做到了。 – Greg

+0

如何清除此缓存呢? –

+0

@SubinJacob - 这些是缓存标题。你在说什么? – Oded