【问题标题】:POST request with JSON body AFNetworking 2.0带有 JSON 主体的 POST 请求 AFNetworking 2.0
【发布时间】:2015-02-07 00:17:32
【问题描述】:

是否可以使用 AFNetworking ~> 2.0 发送带有 JSON 正文的 POST 请求?

我尝试过使用:
manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager POST:<url> parameters: @{@"data":@"value"} success: <block> failure: <block>'

但它不起作用。任何帮助是极大的赞赏。 谢谢

【问题讨论】:

    标签: ios objective-c afnetworking afnetworking-2


    【解决方案1】:

    您可以在 NSMutableURLRequest 中添加 JSON 正文,而不是直接在 parameters: 中。查看我的示例代码:

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // Set post method
    [request setHTTPMethod:@"POST"];
    // Set header to accept JSON request
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    // Your params
    NSDictionary *params = @{@"data":@"value"};
    // Change your 'params' dictionary to JSON string to set it into HTTP
    // body. Dictionary type will be not understanding by request.
    NSString *jsonString = [self getJSONStringWithDictionary:params];
    
    // And finally, add it to HTTP body and job done.
    [request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:request success:<block> failure:<block>];
    

    希望这会对您有所帮助。快乐编码! :)

    【讨论】:

      【解决方案2】:

      如果有人在寻找 AFNetworking 3.0,这里是代码

      NSError *writeError = nil;
      
      NSData* jsonData = [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:&writeError];
      NSString* jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
      
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData  timeoutInterval:120];
      
      [request setHTTPMethod:@"POST"];
      [request setValue: @"application/json; encoding=utf-8" forHTTPHeaderField:@"Content-Type"];
      [request setValue: @"application/json" forHTTPHeaderField:@"Accept"];
      [request setHTTPBody: [jsonString dataUsingEncoding:NSUTF8StringEncoding]];
      
      AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
      
      [[manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
      
          if (!error) {
              NSLog(@"Reply JSON: %@", responseObject);
      
              if ([responseObject isKindOfClass:[NSDictionary class]]) {
                  //blah blah
              }
          } else {
      
              NSLog(@"Error: %@", error);
              NSLog(@"Response: %@",response);
              NSLog(@"Response Object: %@",responseObject);
      
          }
      }] resume];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多