我正在使用RestKit,我正在尝试使用查询参数(以token =< token>形式的身份验证令牌)发布一个对象,但我无法弄清楚如何让它工作.这就是我正在做的……
首先,我将请求对象映射添加到管理器:
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; [requestMapping addAttributeMappingsFromDictionary:@{ @"id" : @"id",@"name" : @"name",@"latitude" : @"latitude",@"longitude" : @"longitude" }]; RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Location class] rootKeyPath:nil]; [manager addRequestDescriptor:requestDescriptor];
然后我发出请求:
RKManagedObjectRequestOperation *operation = [RKObjectManager.sharedManager appropriateObjectRequestOperationWithObject:self method:RKRequestMethodPOST path:@"/api/v1/users/3/locations" parameters:@{@"token" : token}]; [operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation,RKMappingResult *mappingResult) { Location * location = (Location*)mappingResult; self.id = Location.id; } failure:^(RKObjectRequestOperation *operation,NSError *error) { ALog(@"fail!"); }]; [RKObjectManager.sharedManager enqueueObjectRequestOperation:operation];
发出请求时,Location对象被序列化为JSON并放入请求体中.但是,不是将标记添加到查询字符串中,而是将其作为JSON添加到请求正文中.
例:
request.body={"id":0,name="test","longitude":-0.1337,"latitude":51.50998,"token":"Z3JlZ2c6MTM2MDU2OTk2MDY2OTpMajkxd01acWxjcGg1dEpFVy9IaEcwNTcyMWJkSEpnTFRTQTI2eXNlN29VOVRTc1UwV1lEU0E9PQ=="}
任何帮助是极大的赞赏!
解决方法
在
https://gist.github.com/onelittlefish/5970616有一个Gist,为RKObjectManager提供了一个很好的扩展,允许你向PUT或POST请求添加查询参数.
只需将这些文件放入项目中,导入标题,然后就可以使用类似@giuseppe的答案(将params添加到正文,而不是路径).唯一的区别是将参数更改为queryParameters – 您的调用可能如下所示:
[objectManager postObject:self path:@"/api/v1/users/3/locations" queryParameters:queryParams success:^(RKObjectRequestOperation *operation,RKMappingResult *mappingResult) { Location * location = (Location*)mappingResult; self.id = Location.id; } failure:^(RKObjectRequestOperation *operation,NSError *error) { ALog(@"fail!"); } ];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。