我正在使用AFNetworking并试图弄清楚如何正确使用PUT请求。这就是API文档给我的东西(只是一个简单的例子)。
curl -X PUT -d '{"problem":[{"problem":"text"}]}'
"https://api.website.com/form?apiKey={apiKey}"
Params是
'{"problem":[{"problem":"text"}]}'
,而urlStr为https://api.website.com/form?apiKey={apiKey}
如果您需要更多信息,请告知我们。
这是我的执行请求。
- (void) executePutRequest : (NSString *) url params : (NSString *) params
{
NSString *urlStr = [NSString stringWithFormat:@"%@?apikey=%@", url,apiKey];
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager PUT:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
[operation setUserInfo:userinfo];
SBJsonParser *jsonparser = [SBJsonParser new];
id result = [jsonparser objectWithString:[operation responseString]];
if ( self.delegate != nil && [self.delegate respondsToSelector:finishSelector] ) {
[self.delegate performSelector:finishSelector withObject:result];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[operation setUserInfo:userinfo];
if ( self.delegate != nil && [self.delegate respondsToSelector:failSelector] ) {
[self.delegate performSelector:failSelector withObject:[operation error]];
}
}];
}
我做错了什么?我收到400错误(错误的请求)。这就是我的日志的样子。
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo=0x7aee9a40 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7aeea400>
答案 0 :(得分:2)
AFNetworking旨在为您完成一些冗余工作,包括分别序列化和反序列化服务器输出和服务器输入。您的代码暗示您也尝试手动执行,这是不正确的。
您已params
设为NSString *
。只需将它预期的NSDictionary *
传递给它即可。例如NSDictionary *params = @{ @"problem": @[ @{ @"problem": @"text" }]};
,来自您的例子。
如果输入成功块,则应将responseObject反序列化为您已配置的格式。 IIRC,默认的响应格式是JSON - 但要查找它。您不需要进一步处理响应 - 它已经为您完成了。例如,如果JSON主体类似{ "cat": { "says": "meow" } }
,那么只需将对象转换为NSDictionary;例如NSDictionary *catDict = (NSDictionary *)responseObject;
您或您的团队是否编写了网络服务?您知道预期的请求和响应格式是什么吗?
如果你必须进一步配置请求和响应序列化程序,你可以在你的经理的构造函数中这样做(所以将经理子类化,然后制作你自己的)。例如,
[self setRequestSerializer:[AFJSONRequestSerializer serializer]];
[self setResponseSerializer:[AFJSONResponseSerializer serializer]];
...将配置客户端将JSON发送到服务器,并期望从服务器返回JSON。