Как получить доступ к коллекциям внутри NameValueCollection, возвращаемым HttpUtility.ParseQueryString? - PullRequest
0 голосов
/ 30 августа 2011

Использование C #, .net 4.0

Я использую HttpUtility.ParseQueryString для анализа почтового URI, например:

MailMessage message = new MailMessage();
NameValueCollection mailTo = System.Web.HttpUtility.ParseQueryString(mailToUri.OriginalString.Split('?')[1]);
message.Subject = mailTo["subject"];

URI может иметь несколько параметров «to»,например:

mailto://?to=address1@email.com&to=address2@email.com&to=address3@email.com&subject=test&body=this%20should%20be%20the%20body"

При просмотре кода я вижу, что ParseQueryString создает mailTo ["to"] NameValueCollection, которая содержит один ключ "to" с несколькими значениями, который выглядит как объект типаSystem.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry

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

        foreach (String address in mailTo["to"])
        {
            message.To.Add(new MailAddress(address));
        }

Кроме того, если вы знаете лучший способ перехода от mailto URI к SMTP-сообщению, я весь в глазах.

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Чтобы ответить на ваш вопрос, не предлагая альтернативного решения, попробуйте это:

     foreach (var value in mailTo.GetValues("to"))
     {
        Debug.WriteLine(value);
     }
2 голосов
/ 30 августа 2011

часть значения NameValueCollection представляет собой строку.Таким образом, для клавиши «to» это будет строка адресов электронной почты с разделителями-запятыми.

string s = "to=address1@email.com&to=address2@email.com&to=address3@email.com&subject=test";
var items = System.Web.HttpUtility.ParseQueryString(s);

foreach(string email in items["to"].Split(','))
{
    Console.Out.WriteLine(email);
}

приводит к следующему

address1@email.com
address2@email.com
address3@email.com
0 голосов
/ 30 августа 2011

mailTo ["to"] - это просто строка, содержащая разделенные запятыми адреса, которые можно разделить и проанализировать следующим образом:

    foreach (var address in mailTo["to"].Split(','))
    {
        message.To.Add(new MailAddress(address));
    }
...