2012-06-18 35 views
5

我試圖使用AFHTTPClient方法「postPath」將一個參數鍵的多個值傳遞給HTTP請求。然而,參數變量是一個NSDictionary,所以我不能爲我的密鑰「email」設置多個值。我嘗試將電子郵件值作爲逗號分隔的字符串發送,但這不起作用,因爲我的服務器返回錯誤,說我沒有指定任何電子郵件值。AFNetworking - 如何爲一個密鑰指定多個值

我讀過有關使用multipartFormRequestWithMethod方法的文檔,但我無法完全弄清楚如何使這項工作。任何人都可以提供一個使用此方法的單個鍵具有多個值的示例嗎?

感謝

豐富

+0

因爲NSDictionary中不允許重複鍵,這會阻止您完成您的具體使用情況。 你可以做的是以這個方法創建NSMutableURLRequest,並自己手動構造POST正文字符串。 –

回答

2

不能爲單個鍵定義多個值。但是,您可以定義一個鍵以擁有一個數組,該數組本身包含多個值。

也就是說,它似乎並不像email將是一個應該有多個定義的字段。如果您確實想要接受多個值,則應該將該參數重命名爲emails

+0

感謝您的回覆。我曾嘗試將一個電子郵件參數傳遞給一個NSArray,但服務器類似地回覆說我沒有傳遞一個電子郵件地址。有任何想法嗎? –

+0

因此,看起來AFNetworking代碼將「電子郵件」的關鍵並將其轉換爲「電子郵件[]」,這就是爲什麼服務器無法識別傳遞的電子郵件地址。有什麼辦法可以防止這種情況發生? –

+0

@RichMorey這就是這樣一個觀點:'email []'是許多框架如Rails用來表示多個值被傳遞的慣例。你寫了API嗎?如果你得到這樣的驗證,看起來服務器只需要一個電子郵件。爲什麼不這樣做呢? – mattt

4

組合一個鍵的多個值。

使用的NSDictionary的NSArray +

例如:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", [NSArray arrayWithObjects:@"value3",@"value4",@"value5",nil], @"param3", nil]; 

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/yourhostpath" parameters:params]; 

需要更換 「URL」 和 「yourhostpath」 你自己的,請參考AFNetworking的AFHttpClient演示代碼這一點。

12

組合一個鍵的多個查詢值。

如果您使用NSDictionary + NSSet,您將從NSArray獲得沒有[]的查詢url。

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
[NSSet setWithObjects:@"value1", @"value2", nil], @"myKey", nil]; 

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/path" parameters:params]; 

PS:遲到總比永遠......

+0

如果我想發送多個具有相同值的參數,該怎麼辦?這 '[NSSet setWithObjects:@「value1」,@「value1」,@「value2」,@「value2」,零]' 不起作用。 – krotov

相關問題