oc初学者:请问用application/json方式提交POST请求应该怎么写?

Header
{
"Content-Type":"application/json"
}

用下面的代码取不到返回值,请问应该怎么写?

  • (void)POSTRequestWithUrl:(NSString *)urlString paramaters:(NSMutableDictionary *)paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail {

    NSMutableString *strM = [[NSMutableString alloc] init];
    [paramaters enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {

    // 服务器接收参数的 key 值.
    NSString *paramaterKey = key;
    
    // 参数内容
    NSString *paramaterValue = obj;
    
    // appendFormat :可变字符串直接拼接的方法!
    [strM appendFormat:@"%@=%@&",paramaterKey,paramaterValue];
    

    }];

    NSString *body = [strM substringToIndex:strM.length - 1];

    NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];

    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];

    // 1.设置请求方法:
    request.HTTPMethod = @"POST";

    // 2.设置请求体
    request.HTTPBody = bodyData;

    //获得会话对象
    NSURLSession *session = [NSURLSession sharedSession];

    // 2. 发送网络请求.
    // completionHandler: 说明网络请求完成!
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    
    // 网络请求成功:
    if (data && !error) {
    
        // 查看 data 是否是 JSON 数据.
        // JSON 解析.
        id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
        // 如果 obj 能够解析,说明就是 JSON
        if (!obj) {
            if ([[obj objectForKey:@"status"] isEqualToString:@"200"]) {
                obj = data;
    
            }else if ([[obj objectForKey:@"status"] isEqualToString:@"500"]) {
                NSLog(@"%@",[obj objectForKey:@"messageText"]);
            }
        }
        dispatch_async(dispatch_get_main_queue(), ^{// 成功回调
            if (success) {
                success(obj,response);
            }
        });
    }else{//失败回调
        if (fail) {
            fail(error);
        }
    }
    

    }];
    [dataTask resume];
    }

1个回答

你是取不到返回值?还是请求不成功?

u011432167
Aaron挖了个坑 好像是提交的方式不一样,需要改成用application/json的方式提交,但是这边提交的样式是value1=1&value2=2这种样式的,所以我不知道如果要改成json方式提交是不是只需要修改提交参数的组合样式成{values1:1,value2=2}这样就可以了?还是还有别的什么地方也要修改?
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐