2011-08-29 29 views
0

使用C#,.NET 4.0如何訪問由HttpUtility.ParseQueryString返回的NameValueCollection中的集合?

我使用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 [「到」]的NameValueCollection包含類型System.Collections.Specialized.NameObjectCollectionB的一個單一的「到」鍵具有多個值,這似乎是一個對象步進ase.NameObjectEntry

我確定我錯過了一些簡單的東西。我一直無法弄清楚如何遍歷這個集合並獲得每個單獨的值。我會找這樣的事情,這顯然是行不通的:

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

此外,如果你知道一個更好的辦法從的mailto URI去SMTP郵件,我所有的目光。

回答

2

NameValueCollection的值部分是一個字符串。所以對於「to」鍵,它將是一個逗號分隔的電子郵件地址串。

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] 
+0

打了我一分鐘。此作品+1 – jglouie

+0

當然如此簡單。在調試中查看項目[「to」]會將值分解到集合中,而不是顯示單個逗號分隔值,導致我將所有錯誤路徑導向。謝謝。 – kscott

3

要回答你的問題並沒有提供一種替代解決方案,試試這個:

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

好多了,因爲您不必擔心任何包含逗號的原始值。 – teedyay

0

這個mailto [ 「到」]是一個簡單的字符串,包含逗號分隔的地址,您可以像這樣拆分和解析:

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