2014-05-05 121 views
0

我有一個Web服務,我試圖從中獲取一些數據。最終的URL看起來應該是這樣的:使用AFNetworking 2.0構建URL

http://server.com/services/v2/item/3?....ect

在上述網址的價值3是動態的,我需要改變它的基礎上的用戶行爲。我已經完成了所有這一部分,並且爲了URL,我只是將參數放入了像我所有其他服務一樣的NSDictionary

唯一的區別是此Web服務不像其他Web服務那樣使用鍵的值。所以我只是把這個值放入NSDictionary而沒有密鑰。

發出請求後,最終的URL看起來像這樣:我使用

http://server.com/services/v2/item/?3.....ect

基本URL:http://server.com/services/v2/item/

我只需要在它前面的值與問號價值,而不是之前。

+2

爲什麼不使用'[NSString stringWithFormat:@「」]'並構造URL? – sleepwalkerfx

+0

不知道這將如何幫助?如果我在字典中添加一個字符串,我需要這個參數:「3?」在基本URL的末尾 - 當AFNetworking發出請求時,它在基URL的末尾將URL更改爲「?3」。這不是我所追求的。 (還是)感謝你的建議。 – Tander

+0

檢查我的答案 – sleepwalkerfx

回答

1
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

[manager GET:[NSString stringWithFormat:@"http://server.com/services/v2/item/%d?",myValue] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

而是傳遞到NSDictionaryparameters所述的方法,通過nil。然後構建帶有參數的網址stringWithFormat,並將其傳遞給GET

+0

謝謝。不過,該應用使用140種不同的網絡服務。所以我創建了一個類來處理所有這些服務,並使用NSDictionaries。我真的不想改變從NSDictionary到NSString的一切。然而,你的答案給了我一個想法,所以我現在會做一些測試。謝謝 – Tander

+0

這幫助我解決了我的問題。正如你所建議的,我在請求發出前使用NSString stringWithFormat修改了URL。謝謝! – Tander

+0

我很高興它幫助:) – sleepwalkerfx

0

通常基本URL設置爲你的api endpoint root,所以你的情況應該是http://server.com/services/v2

也可以通過url字符串傳遞參數(在您的案例中的項目的ID)並將其與parameters字典混合。

抓取的項目可能看起來像這樣

... 
// Set a base URL to your session/operations manager 
self.sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL urlWithString:@"http://server.com/services/v2"]]; 
... 


- (NSURLDataTask *)fetchItemWithID:(NSString *)ID parameters:(NSDictionary *)parameters success:... failure:... 
{ 
    NSString *urlPathString = [NSString stringWithFormat:@"item/%@", ID); 

    return [self.sessionManager GET:urlPathString parameters:parameters success:success failure:failure]; 
}