IIS7 ASP.NET MVC 2 资源缓存模块无法工作

3
我有一个HttpModule用来移除不需要的头信息并缓存资产大约30天,但是它似乎没有起作用。以下是代码和HTTP响应: 响应:
Cache-Control   private
Content-Type    text/html; charset=utf-8
Content-Encoding    gzip
Vary    Accept-Encoding
Server  Microsoft-IIS/7.5
X-AspNetMvc-Version 2.0
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Date    Sat, 13 Nov 2010 20:13:57 GMT
Content-Length  1892

代码:

public class AssetCacheModule : IHttpModule
    {
        private static readonly List<string> _headersToRemove = new List<string> { "X-AspNet-Version", "X-AspNetMvc-Version", "Etag", "Server", };   
        private static readonly List<string> _longCacheExtensions = new List<string> {".js", ".css", ".png", ".jpg", ".gif",};  

        public void Init(HttpApplication context)
        {
            context.EndRequest += ContextEndRequest;  
        }

        private static void ContextEndRequest(object sender, EventArgs e)
        {
            var context = HttpContext.Current;
            _headersToRemove.ForEach(h => context.Response.Headers.Remove(h));
            var extension = Path.GetExtension(context.Request.Url.AbsolutePath);
            if (_longCacheExtensions.Contains(extension))
            {
                TimeSpan cacheDuration = TimeSpan.FromSeconds(44000);
                context.Response.Cache.SetCacheability(HttpCacheability.Public);
                context.Response.Cache.SetExpires(DateTime.Now.Add(cacheDuration));
                context.Response.Cache.SetMaxAge(cacheDuration);
                context.Response.Cache.AppendCacheExtension("must-revalidate, proxy-revalidate");
            }  
        }
        public void Dispose() { }
    }

web.config:

   <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
      <add name="CuteWebUI.UploadModule" type="CuteWebUI.UploadModule,CuteWebUI.AjaxUploader"/>
      <add name="AssetCacheModule" type="PostHope.Web.UI.AssetCacheModule, PostHope.Web.UI"/>
    </httpModules>

我错过了什么?

对于AppendCacheExtension()给你点赞,这个在最新的MSDN(javadoc风格存根!)文档中我找不到。谢谢! - jerhewet
1个回答

4

如果您在IIS7中运行集成管道模式,则HTTP模块位于:

<system.webServer>
    <modules>

太简单了,本应该知道的!感谢您抽出时间回答我的问题。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接