2010-12-03 6 views
0

J'ai une collection de valeurs de nom qui est transmise dans une méthode pour envoyer à un autre système via un client Web.Encode valeurs dans un NameValueCollection C# .net

public string DoExtendedTransferAsString(string operation, NameValueCollection query, FormatCollection formats) 
{ 
    System.Net.WebClient client = new System.Net.WebClient(); 
    client.QueryString = query; 
    client.QueryString["op"] = operation; 
    client.QueryString["session"] = SessionId; 
    using (Stream stream = client.OpenRead(url)) 
    { 
     FormatCollection formats = new FormatCollection(stream); 
    } 
    return formats; 
} 

Je dois exécuter HttpUtility.HtmlEncode sur toutes les valeurs à l'intérieur du NameValueCollection mais je ne suis pas sûr comment. NB Je ne peux pas changer le code appelant donc il doit être un NameValueCollection.

Merci

+0

@Liviu M Désolé, je pensais que j'étais spécifique, je veux faire cela aux valeurs dans un NameValueCollection. J'ai essayé pour (int i = 0; i Cookie

Répondre

3

essayer cette

myCollection.AllKeys 
    .ToList() 
    .ForEach(k => myCollection[k] = 
      HttpUtility.HtmlEncode(myCollection[k])); 
+0

FYI pour quiconque utilise ceci la solution nécessite linq pas quelque chose que j'ai remarqué tout de suite. – Cookie

0

De MSDN:

class MyNewClass 
    { 
     public static void Main() 
     { 
     String myString; 
     Console.WriteLine("Enter a string having '&' or '\"' in it: "); 
     myString=Console.ReadLine(); 
     String myEncodedString; 
     // Encode the string. 
     myEncodedString = HttpUtility.HtmlEncode(myString); 
     Console.WriteLine("HTML Encoded string is "+myEncodedString); 
     StringWriter myWriter = new StringWriter(); 
     // Decode the encoded string. 
     HttpUtility.HtmlDecode(myEncodedString, myWriter); 
     Console.Write("Decoded string of the above encoded string is "+ 
         myWriter.ToString()); 
     } 
    } 

Vous faire la partie de codage pour chaque valeur de la collection dans une boucle pour/foreach.

Si ce n'est pas ce que vous cherchiez, veuillez être plus explicite dans la question.

0

Je pense que cela va accomplir ce que vous voulez ...

public string DoExtendedTransferAsString(string operation, NameValueCollection query, FormatCollection formats) 
    { 
     foreach (string key in query.Keys) 
     { 
      query[key] = HttpUtility.HtmlEncode(query[key]); 
     } 

     System.Net.WebClient client = new System.Net.WebClient(); 
     client.QueryString = query; 
     client.QueryString["op"] = operation; 
     client.QueryString["session"] = SessionId; 
     using (Stream stream = client.OpenRead(url)) 
     { 
      FormatCollection formats = new FormatCollection(stream); 
     } 
     return formats; 
    } 

Notez le foreach j'ai ajouté là-dedans, vous êtes juste à itérer toutes les clés, saisissant chaque élément à l'aide de la touche et appelant HtmlEncode sur et le remettre tout de suite.

+1

Malheureusement, je ne reçois pas InvalidOperationException - Collection a été modifiée après que l'énumérateur a été instancié. – Cookie

Questions connexes