2014-06-29 3 views
1

J'ai écrit simple IHttpModuleAjouter ETag utilisant IHttpModule

void context_PreSendRequestHeaders(object sender, EventArgs e) 
{ 
    //remove default 
    HttpContext.Current.Response.Headers.Remove("ETag"); 

    //add version one 
    HttpContext.Current.Response.Headers.Add("ETag", "Test1.0"); 
} 

où je veux supprimer IIS ETag et ajouter mon propre pour contrôler le javascript et les demandes de fichiers CSS des clients - comme dans le cas de la mise à jour je veux qu'il sera être actualisé automatiquement. la réponse du client ok au ETag

If-None-Match: Test1.0 If-Modified-Since: Lun Jun 2014 11:08:54 02 GMT

mais IIS renvoie toujours le contenu au lieu de 304

+0

double possible de [Comment supprimer les en-têtes eTag de IIS7?] (http://stackoverflow.com/questions/477913/how-do-i-remove-etag- headers-from-iis7) –

+0

le problème n'est pas de supprimer l'ETag, car je l'ai supprimé et ajouté le mien. mais quand j'ai ajouté le mien l'IIS le traite comme nouvelle demande et n'envoie jamais 304 –

Répondre

0
void context_PreSendRequestHeaders(object sender, EventArgs e) 
    { 
     var etag = "Test4-0"; 

     //remove default 
     HttpContext.Current.Response.Headers.Remove("ETag"); 

     //add version one 
     HttpContext.Current.Response.Headers.Add("ETag", etag); 

     string ifNoneMatch = HttpContext.Current.Request.Headers["If-None-Match"]; 
     Debug.WriteLine(String.Format("ifNoneMatch - {0}", ifNoneMatch)); 

     if (ifNoneMatch != null && ifNoneMatch.Contains(",")) 
     { 
      ifNoneMatch = ifNoneMatch.Substring(0, ifNoneMatch.IndexOf(",", StringComparison.Ordinal)); 
     } 

     HttpContext.Current.Response.Cache.VaryByHeaders["If-None-Match"] = true; 
     Debug.WriteLine(String.Format("ifNoneMatch - etag: {0}-{1}", ifNoneMatch, etag)); 
     if (etag == ifNoneMatch) 
     { 
      Debug.WriteLine(String.Format("ifNoneMatch2 - etag: {0}-{1}", ifNoneMatch, etag)); 
      HttpContext.Current.Response.ClearContent(); 
      HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.NotModified; 
      HttpContext.Current.Response.SuppressContent = true; 
     } 
    } 
}