日期:2014-05-18  浏览次数:20442 次

关于asp.net 缓存JS,CSS,图片等不经常变动的文件。
弄了个小网站,发现数据库展示的信息小,JS CSS 图片很多,而且由于网站背景这些东西可能 几年都不会变,遂想把这些不变的东西缓存到客户端存他一个月更新一次。
1,办法是改IIS设置启用IIS的过期功能。但是这样的方法不实用,一般都把网站放在服务商哪儿,不能改IIS 。
2,写代码设置缓存写个类继承IHttpHandler,在配置文件里配置要监视客户端的请求文件类型。
C# code
 context.Response.Cache.SetExpires(DateTime.Now.Add(new TimeSpan(7,0,0,0)));
            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.Cache.SetValidUntilExpires(false);


            switch (extension)
            {
                case "jpg":
                    context.Response.ContentType = "image/jpeg";
                    break;
                case "png":
                    context.Response.ContentType = "image/png";
                    break;
                case "gif":
                    context.Response.ContentType = "image/gif";
                    break;
                case "swf":
                    context.Response.ContentType = "application/x-shockwave-flash";
                    break;
                case "css":
                    context.Response.ContentType = "text/css";
                    break;
                case "js":
                    context.Response.ContentType = "application/x-javascript";
                    break;
            }
            context.Response.AddHeader("content-disposition", "inline; filename=" + filename);
            context.Response.WriteFile(file);
        }

写完在VS测试正确HttpWacth监视,CSS JS 图片都正确的缓存了。但是问题来了,发下发布过后,设定的缓存时间无效了。值为 not set ,google之,发现有位仁兄在后缀加上了 ashx。测试了一下对了。
问题:为什么要在后面加上 ashx呢? 是自定义HTTP头的原因吗? 希望大家帮我解下惑。才开始学习编程


------解决方案--------------------
ashx用了处理不需要aspx处理的文件请求,约等于输出时不时html的,如图片
用它可以方便的调用httphandler,不用web.config配置
你的问题可能是,handler配置有问题,所以用ashx没问题了
------解决方案--------------------
楼主你说的文件,一般的游览器都会有缓存的,也就是说的客户端缓存,这个就算你不设置,也是有的。
------解决方案--------------------
既然是个小网站,就没必要去弄的那么复杂


 
 
 
 
----------------------------------签----------名----------栏----------------------------------