2012-07-08 51 views
2

我想使用AFNetworking的HTTP Post方法與一些參數和兩個值具有相同的參數。我試過了:AFHTTPClient requestWith方法ParameterEncoding

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
NSDictionary *params = [NSDictionarydictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3", @"param3", @"value4", @"param3", nil]; 
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/index.php" parameters:params]; 

我使用了Charles Proxy,並發現我的請求中缺少了value4。

然後我嘗試:

NSString *parameter = @"param1=value1&param2=value2&param3=value3&param3=value4"; 
[request setHTTPBody:[parameter dataUsingEncoding:NSUTF8StringEncoding]]; 

而且這個工作。

現在我想知道如果我在AFNetworking上做錯了什麼,或者這是AFNetworking的錯誤嗎?

回答

3

你的問題是不是AFNetworking但NSDictionary的。您不能使用相同的密鑰擁有兩個條目。

在這種情況下,它的意思是:

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

應更換以下

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

用於所述一個鍵的兩個值組合。

將參數組合在一個鍵中的另一種方法是使用NSArray。例如:

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

當然。我沒有想到,但很明顯。 - (NSMutableURLRequest *)requestWithMethod:(NSString *)方法 path:(NSString *)路徑 參數:(NSDictionary *)parameters'需要一個NSDictionary。有沒有辦法用NSDictionary生成上面提到的參數字符串? – 2012-07-08 16:19:46

+1

@KaiOe不,沒有辦法以這種方式重複輸入密鑰。如果你需要這樣做,或者手動構建和設置POST體(就像你之前做的那樣),或者如果參數需要一個數組(它可能應該,因爲你定義了多個值),將它們編碼到一個數組中參數字典。 – mattt 2012-07-09 14:31:10

+1

是的,參數需要一個數組。這很有效:'NSArray * xjxargs = [NSArray arrayWithObjects:@「value3」,@「value4」,nil]; NSDictionary * params = [NSDictionary dictionaryWithObjectsAndKeys:xjxargs,@「param3」];'非常感謝! – 2012-07-09 18:50:52

0

錯字,使用param4而不是param3作爲最後一個鍵值。

NSDictionary *params = [NSDictionarydictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3", @"param3", @"value4", @"param3", nil] 

更正一個

NSDictionary *params = [NSDictionarydictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3", @"param3", @"value4", @"param4", nil] 
+0

這不是拼寫錯誤。我想爲param3使用value3和value 4.這是因爲param3是一個數組。看看這篇文章:http://stackoverflow.com/questions/177815/post-multiple-parameters – 2012-07-08 16:12:14