2010-11-13 39 views
3

J'ai ce HttpModule que j'utilise pour supprimer les en-têtes indésirables et les actifs de cache pendant environ 30 jours, mais cela ne semble pas fonctionner. réponse du code et http ci-dessous:IIS7 Module de mise en cache d'actifs ASP.NET MVC 2 ne fonctionne pas

Réponse:

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 

code:

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> 

Qu'est-ce qui me manque ???

+0

+1 pour AppendCacheExtension(), que je ne pouvais pas trouver cacher ni cheveux dans le dernier MSDN (javadoc -style stubs!) documentation pour Response.Cache. Soyez bénis! – jerhewet

Répondre

4

Si vous êtes en mode Pipeline intégré dans IIS7, modules HTTP vont sous:

<system.webServer> 
    <modules> 
+0

Si simple, aurait dû le savoir! Merci d'avoir pris le temps de répondre à ma question. – Paul