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

AFNetworking 单元测试

AFNetworking 错误:“(200-299)中的预期状态代码,得到 404”

在 AFNetworking 2 的失败块中访问 JSON 响应