2010-12-03 63 views
0

我有一個名稱值集合,它傳遞給一個方法,通過Web客戶端發送到另一個系統。在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; 
} 

我需要在裏面的NameValueCollection所有值運行HttpUtility.HtmlEncode但我不確定如何。 NB我不能改變調用代碼,所以它必須是一個NameValueCollection。

感謝

+0

@Liviu對不起,我還以爲我被具體,我想這樣做是爲了在一個NameValueCollection中的值。我嘗試過(int i = 0;我 Cookie 2010-12-03 14:01:03

回答

3

試試這個

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

僅供參考使用此解決方案的任何人都需要linq,而不是我馬上注意到的東西。 – Cookie 2010-12-04 12:25:16

0

從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()); 
     } 
    } 

您一個用於/ foreach循環集合中的每個值做編碼部分。

如果這不是你正在尋找的請在問題中更明確。

0

我認爲這將完成你想要的......

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; 
    } 

注意我在裏面添加的foreach,你只是通過所有的按鍵迭代,使用鍵抓住每一個項目和呼籲的HTMLEncode它把它馬上回來。

+1

不幸的是我沒有得到InvalidOperationException - 集合在枚舉器實例化後被修改。 – Cookie 2010-12-03 14:04:56