2010-04-12 7 views
0

J'ai une partie du projet Asp.NET 1.1.Asp.NET 1.1 HttpResponse en-têtes

Je travaille avec un site distant, ce qui est incorrect dans certains cas - parfois, il écrit un en-tête Content-Encoding incorrect.

Dans mon code, j'obtiens HttpResponse à partir de ce site distant. Et si l'en-tête Content-Encoding est égal à, par exemple, "gzip", je dois définir l'en-tête Content-Encoding sur "deflate".

Mais il n'y a pas de propriétés ou méthodes dans la classe HttpResponse pour obtenir l'en-tête Content-Encoding.

La propriété Content-Encoding renvoie, dans mon cas, "UTF-8". Dans la fenêtre Watch, je vois le champ _customProperties, qui contient une valeur de chaîne incorrecte. Comment puis-je modifier la valeur de l'en-tête avec Asp.NET 1.1?

+0

Vous savez que .NET 4.0 a été livré aujourd'hui, n'est-ce pas? –

+0

Oui, bien sûr! Il y a une partie du code de vieux grand projet et nous le maintenons. –

+0

Peut-être que c'est possible de changer cette valeur avec la réflexion? –

Répondre

0

Il n'existe aucun moyen de modifier les en-têtes personnalisés dans Asp.NET 1.1.

Je résous le problème en utilisant seulement la réflexion.

// first of all we need get type ArrayList with custom headers: 
Type responseType = Response.GetType(); 
ArrayList fieldCustomHeaders = ArrayList)responseType.InvokeMember("_customHeaders",BindingFlags.GetField|BindingFlags.Instance|BindingFlags.NonPublic, null, Response,null); 

// next we go thru all elements of list and search our header 
for(int i=0; i < fieldCustomHeaders.Count; i++) 
{ 
    // see all headers 
    PropertyInfo propHeaderName = fieldCustomHeaders[i].GetType().GetProperty("Name", BindingFlags.Instance|BindingFlags.NonPublic); 

    String headerName = (String)propHeaderName.GetValue(fieldCustomHeaders[i], null); 

    // if we find needed header 
    if(headerName == "Content-Encoding") 
    { 
     // get value of header from its field 
     FieldInfo fieldHeaderValue = _fieldCustomHeaders[i].GetType().GetField("_value", BindingFlags.Instance|BindingFlags.NonPublic); 

     String headerValue = (String)fieldHeaderValue.GetValue(fieldCustomHeaders[i]); 

     // if we find needed value 
     if (headerValue == "gzip") 
     { 
      // just set new value to it 
      fieldHeaderValue.SetValue(_fieldCustomHeaders[i], "deflate"); 
     break; 
     } 
    }     
}