【问题标题】:How to access collections within NameValueCollection returned by HttpUtility.ParseQueryString?如何访问 HttpUtility.ParseQueryString 返回的 NameValueCollection 中的集合?
【发布时间】:2011-08-29 21:17:20
【问题描述】:

使用 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 消息的更好方法,我会全力以赴。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 好多了,因为您不必担心任何包含逗号的原始值。
    【解决方案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
    

    【讨论】:

    • 当然,这么简单。在调试中查看 item["to"] 会将值分解为一个集合,而不是显示单个逗号分隔的值,从而导致我走错了路。谢谢。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2020-04-12
      • 2012-06-10
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多