Кодировать значения в NameValueCollection C # .net - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть коллекции значений имени, которые передаются в метод для отправки в другую систему через веб-клиент.

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

Мне нужно запустить HttpUtility.HtmlEncode для всех значений внутри NameValueCollection, но я не уверен, как это сделать.NB. Я не могу изменить вызывающий код, поэтому он должен быть NameValueCollection.

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

попробуйте

myCollection.AllKeys
    .ToList()
    .ForEach(k => myCollection[k] = 
            HttpUtility.HtmlEncode(myCollection[k]));
0 голосов
/ 03 декабря 2010

Я думаю, что это выполнит то, что вы хотите ...

    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на это и положить его обратно.

0 голосов
/ 03 декабря 2010

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

Вы выполняете часть кодирования для каждого значения в коллекции в цикле for / foreach.

Если это не то, что вы искали, пожалуйста, уточните в этом вопросе.

...