2014-01-23 7 views
16

AFNetworking позволяет добавить в запрос параметры NSDictionary, и он добавит их в запрос. Поэтому, если бы я хотел сделать запрос GET с ?q=8&home=8888, я бы просто сделал NSDictionary как @{@"q": @"8", @"home": @"8888"} очень просто.Есть ли способ привязать NSDictionary параметров к NSURLRequest вместо ручного создания строки?

Есть ли способ сделать это с помощью NSURLSession/NSURLConnection/NSURLRequest?

Я знаю, что могу использовать NSJSONSerialization для добавления данных JSON, но что, если я просто хочу их как параметров в URL? Должен ли я просто добавить категорию?

+0

чек я только что отправил ответ - его довольно просто с NSMutableURLRequest –

+0

возможным дубликата [Создание параметров запроса URL из объектов NSDictionary в ObjectiveC] (http://stackoverflow.com/questions/718429/creating-url- query-parameters-from-nsdictionary-objects-in-objectivec) – Pochi

ответ

-1

TRY НИЖЕ РАБОЧИЙ КОД

// Create the request. 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"YOUR URL"]]; 

// Specify that it will be a POST request 
request.HTTPMethod = @"POST"; 

// This is how we set header fields 
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 


// Convert your data and set your request's HTTPBody property 

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"44",@"UserId",@"0",@"NewsArticleId",@"",@"Date", nil]; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil]; 

request.HTTPBody = jsonData; 


// Create url connection and fire request 
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
+2

Это для запроса POST, а не для запроса GET, где параметры должны быть закодированы в URL-адресе (в отличие от данных о теле http для сообщения) – Pochi

+0

Собственно, это работает для меня, поскольку я ищу запрос POST. Благодарю. –

-2

Пример использования NSURLSession:

NSURLSession *session = [NSURLSession sharedSession]; 
//populate json 
NSDictionary *gistDict = @{@"files":@"test",@"description":@"test"}; 
NSError *jsonError; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:gistDict options:NSJSONWritingPrettyPrinted error:&jsonError]; 
//populate the json data in the setHTTPBody:jsonData  
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://yourURL"]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:jsonData]; 
//Send data with the request that contains the json data 
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    // Do your stuff... 
}] resume]; 
10

Вы можете сделать это путем обновления URL с помощью NSURLComponents и NSURLQueryItems. В следующем примере предположим, что параметр URL уже установлен в NSMutableURLRequest. Вы можете изменить его перед использованием, чтобы включить каждый параметр из NSDictionary params. Обратите внимание, что каждый параметр кодируется до его написания.

NSURLComponents *url = [[NSURLComponents alloc] initWithURL:request.URL resolvingAgainstBaseURL:YES]; 
NSMutableArray *queryItems = NSMutableArray.new; 
[params enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) { 
    [queryItems addObject:[NSURLQueryItem queryItemWithName:name 
          value:[value stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]]]; 
      }]; 
url.queryItems = queryItems; 
request.URL = url.URL;