AFNetworking:返回 200 且无内容时运行失败块
Posted
技术标签:
【中文标题】AFNetworking:返回 200 且无内容时运行失败块【英文标题】:AFNetworking: failure block running when returning with 200 and no content 【发布时间】:2012-08-20 20:47:15 【问题描述】:我正在使用 AFNetworking 处理从我的移动应用程序到我的 rails 服务器的重置密码请求。
API 正在返回: head :ok (结果为 200)
但是,当我发出 getPath
请求时,这会导致 AFNetworking 运行失败块。
我可以做两件事来运行成功块:
-
让 api 返回
head :no_content
(结果为 204)
不要将我的 Accept 标头设置为 `application/json'
当状态码为 200 且 Accept 标头为 application/json
时,似乎 AFNetworking 至少需要一个空数组。
我没有完全控制 api,所以是否有可能有一个没有内容的 200 仍然触发我的成功块,或者 204 应该用于这种确切的情况,它成功但什么都不会从服务器返回?
谢谢!
【问题讨论】:
该死,我也遇到了完全相同的用例,但在网上其他任何地方都找不到提到的任何内容。 【参考方案1】:您可以使用AFHTTPRequestOperation
并自己处理响应代码,而不是使用 AFNetworking 的成功和完成块。例如:
// Setup HTTP client
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://website.com"]];
// Create the request
NSURLRequest *request = [client requestWithMethod:@"GET" path:@"authenticate" parameters:params];
// Create an HTTP operation with your request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
// Setup the completion block
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
switch (operation.response.statusCode)
case 200:
// Do stuff
break;
default:
break;
failure:^(AFHTTPRequestOperation *operation, NSError *error)
switch (operation.response.statusCode)
case 400:
// Do stuff
break;
default:
break;
];
// Begin your request
[operation start];
【讨论】:
不要使用waitUntilFinished
。网络请求应始终异步进行。相反,将任何需要服务器响应的逻辑放在completionBlock
中。以上是关于AFNetworking:返回 200 且无内容时运行失败块的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking:如何知道响应是不是使用缓存? 304 或 200
AFNetworking 总是返回不可接受的内容类型:text/html
AFNetworking,AFHTTPRequestOperationManager 操作失败,代码为 200