Как да получите достъп до колекции в NameValueCollection, върнати от HttpUtility.ParseQueryString?

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

Използвам HttpUtility.ParseQueryString за синтактичен анализ на mailto URI, като такъв:

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

URI може да има множество параметри "до", като например:

mailto://[email protected]&[email protected]&[email protected]&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 съобщение, аз съм на очи.


person kscott    schedule 29.08.2011    source източник


Отговори (3)


стойностната част на NameValueCollection е низ. Така че за клавиша "до" това ще бъде разделен със запетаи низ от имейл адреси.

string s = "[email protected]&[email protected]&[email protected]&subject=test";
var items = System.Web.HttpUtility.ParseQueryString(s);

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

води до следното

[email protected]
[email protected]
[email protected]
person CraigW    schedule 29.08.2011
comment
Разбира се, толкова просто. Прегледът на item[to] в debug разделя стойностите в колекция, вместо да показва стойността, разделена със запетая, което ме води по всички грешни пътища. Благодаря. - person kscott; 30.08.2011

За да отговорите на въпроса си, без да предлагате алтернативно решение, опитайте следното:

     foreach (var value in mailTo.GetValues("to"))
     {
        Debug.WriteLine(value);
     }
person Jacob Tabak    schedule 29.08.2011
comment
Толкова по-добре, защото не е нужно да се притеснявате за някоя от първоначалните стойности, съдържащи запетая. - person teedyay; 08.05.2013

mailTo["to"] е просто низ, който съдържа адресите, разделени със запетая, които можете да разделите и анализирате по следния начин:

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