在Objective-C中使用Afnetworking的Post方法

问题描述:

如何使用Afnetworking将代码编写为以下JSON格式的POST方法。在Objective-C中使用Afnetworking的Post方法

{ 
Media 
    { 
     Photo : image.jpg, 
     UserId : 2 
    }, 
Personal 
    { 
     Name : aaa, 
     Age : 30 
    }, 
Education 
    { 
    College : xxx, 
    Course : yyy  

    }, 
} 
+0

你的代码在哪里?请参阅[问]。你甚至不用花费2分钟的时间[参观]。 –

很明显,这不是真正的格式,但我们可以猜测你的意思。很显然,如果这些数值(用户ID和年龄)预计为字符串,然后引用的话,但希望它说明了字典的Objective-C的表达可能是什么样子:

NSDictionary *parameters = @{@"Media": @{@"Photo": @"image.jpg", @"UserId": @2}, @"Personal": @{@"Name": @"aaa", @"Age": @30}, @"Education": @{@"College": @"xxx", @"Course": @"yyy" }}; 

然后你就可以发布它作为JSON像这样:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

[manager POST:@"https://yoururl.com" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"responseObject = %@", responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"error %@", error); 
}]; 

如果您的服务器不支持HTTPS,但只有HTTP,那么你可能需要改变你的Info.plist的‘应用交通运输安全设置’到‘允许任意负载’。

enter image description here

+0

感谢罗布,我怎样才能发送“image.jpg”,是否需要像这样转换formdata,AFHTTPRequestOperationManager * requestManager; [requestManager POST:KAPIUploadOutfit参数:PARAMS constructingBodyWithBlock:^(ID FORMDATA) { [FORMDATA appendPartWithFileURL:fileURL名:@ “PHOTO_URL” 文件名:文件名mime类型:@ “图像/ PNG” 错误:无]; } – Lenin

+0

当然,但这不是JSON,你说你想用。这是一个'multipart/form-data'请求。这是发送文件和发送表单值(即键/名称和值对)的好方法,但不适用于发送结构化JSON(或者至少没有将JSON放入'multipart/form-data'请求中) 。因此,您可以选择:使用'multipart/form-data'并简化请求其余部分的结构,或者使用JSON,但是必须将图像转换为JSON中的某些文本表示(例如base-64编码),你将不得不在服务器端解码.. – Rob

+0

感谢您的回答罗布。 – Lenin

首先使PARAMS要发送

NSDictionary *params = @{ 
            @"contact_no":@"9898989898", 
            @"password":@"••••••••••" 
            }; 

然后写下面的代码

AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager]; 
    operationManager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    operationManager.responseSerializer = [AFJSONResponseSerializer serializer]; 
operationManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 
     [operationManager POST:urlString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject){ 
      NSLog(@"%@",responseObject); 

     } failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
      if (failure) 
       NSLog(@"%@",error.localizedDescription); 
     }]; 

可以忽略行中,我设置的acceptableContentTypes字典。

希望这会有所帮助。