如何访问HttpUtility.ParseQueryString返回的NameValueCollection中的集合?

时间:2011-08-29 21:17:20

标签: c# .net parsing query-string uri

使用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可以有多个“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 个答案:

答案 0 :(得分:3)

要在不提供替代解决方案的情况下回答您的问题,请尝试以下方法:

     foreach (var value in mailTo.GetValues("to"))
     {
        Debug.WriteLine(value);
     }

答案 1 :(得分:2)

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

答案 2 :(得分:0)

mailTo [“to”]只是一个字符串,其中包含逗号分隔的地址,您可以像这样拆分和解析:

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