如何正确发布HTTP正文?

时间:2016-06-29 13:12:10

标签: ios objective-c http-headers http-post

我在iOS中有一个方法,我要做的就是在POST Body中使用简单NSDictionary执行HTTP。以下是rac_POST的回复。

return [[[self rac_POST:[NSString stringWithFormat:@"reservations/%@/update",reservationID] parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
   [formData appendPartWithHeaders:@{@"Content-Type":@"application/json"} body:jsonData];
   [formData appendPartWithFormData:jsonData name:@"payload"];

}] map:^id(RACTuple *t) {
    RACTupleUnpack(NSDictionary * result) = t;
    return result;
}] catch:^RACSignal *(NSError *error) {
       return [self customErrorSignal:error];
}];

我已经尝试了很多方法,但只是POSTING通过API正确。我正在将NSDictionary转换为NSData,如下所示:

NSMutableDictionary *payloadDict = [[NSMutableDictionary alloc]init];
[payloadDict setObject:payloadArray forKey:@"payload"];
NSData *jsonData = [NSKeyedArchiver archivedDataWithRootObject:payloadDict];

我的方法中缺少什么?

我还尝试在我的参数body中添加payloadDict(我的代码中为dictionary),但它无效。根据我们的内部API文档,它特别说要将payloadDict添加为HTTP正文的一部分。有人也可以澄清这是否会产生影响?

2 个答案:

答案 0 :(得分:1)

您可以使用这种方式将NSDictionary转换为NSData

NSData  *jsonData = [NSJSONSerialization  dataWithJSONObject:questionDict options:0 error:nil];

答案 1 :(得分:0)

如果您的服务接受json格式的数据,那么您应该使用$(document).ready(function(){ $('.somecontainer').on('resize',function(){ if ($('.somecontainer').width() < 640) { $('.somecontainer').addClass('m'); } else { $('.somecontainer').removeClass('m'); }); }); 将根对象转换为数据而不是NSJSONSerialization