iOS:在这种情况下 put 请求如何工作?
Posted
技术标签:
【中文标题】iOS:在这种情况下 put 请求如何工作?【英文标题】:iOS: How would a put request work in this scenario? 【发布时间】:2014-10-20 20:21:31 【问题描述】:我正在使用 AFNetworking 并试图弄清楚如何正确使用 PUT 请求。这就是 API 文档给我的(只是一个简单的例子)。
curl -X PUT -d '"problem":["problem":"text"]'
"https://api.website.com/form?apiKey=apiKey"
参数是
'"problem":["problem":"text"]'
而 urlStr 是 https://api.website.com/form?apiKey=apiKey
如果您需要更多信息,请告诉我。
这是我正在执行的 put 请求。
- (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>
【问题讨论】:
你在做什么失败了?你有错误吗?您是否看到与预期不同的行为?到目前为止,您做了哪些调试工作? 好的,我发布了我的错误日志。我检查了堆栈溢出,似乎找不到答案。 【参考方案1】:AFNetworking 旨在为您完成一些冗余工作,包括分别序列化和反序列化到服务器的输出和来自服务器的输入。您的代码暗示您也在尝试手动执行此操作,这是不正确的。
您已将params
设置为NSString *
。只需将它期望的NSDictionary *
传递给它。例如NSDictionary *params = @ @"problem": @[ @ @"problem": @"text" ];
,来自你的例子。
如果你输入了成功块,那么responseObject应该被反序列化为你配置的格式。 IIRC,默认响应格式是 JSON——但请查一下。您不需要进一步处理响应——它已经为您完成了。例如,如果 JSON 主体类似于 "cat": "says": "meow"
,那么只需将对象转换为 NSDictionary;例如NSDictionary *catDict = (NSDictionary *)responseObject;
您或您的团队是否编写了 Web 服务?你知道预期的请求和响应格式是什么吗?
如果您必须进一步配置请求和响应序列化程序,您可以在管理器的构造函数中执行此操作(因此子类化管理器,并自己创建)。例如,
[self setRequestSerializer:[AFJSONRequestSerializer serializer]];
[self setResponseSerializer:[AFJSONResponseSerializer serializer]];
... 将客户端配置为将 JSON 发送到服务器,并期望从服务器返回 JSON。
【讨论】:
以上是关于iOS:在这种情况下 put 请求如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
错误:CON laravel恩axios.put“请求,状态码500失败”()