这个 AFNetworking JSON 帖子我做错了啥?

Posted

技术标签:

【中文标题】这个 AFNetworking JSON 帖子我做错了啥?【英文标题】:What am I doing wrong with this AFNetworking JSON Post?这个 AFNetworking JSON 帖子我做错了什么? 【发布时间】:2013-09-04 03:54:57 【问题描述】:

我有一个奇怪的问题...我正在使用 AFNetworking 针对 Rails 服务器执行此 ios http/json 帖子,预期输出类似于:

"success":true,"auth_token":"4D8CyUsyGZdqo6X1TCeq"

有时它会按预期工作,但通常在 Rails 端,请求不会被检测为“JSON”请求,因此它提供 html。有人对此有想法吗?在设置 JSON 请求方面我做错了什么吗?

 NSDictionary *parameter = @@"email":@"philswenson@mymail.com", @"password":@"mypassword";
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]];
    [httpClient setParameterEncoding:AFJSONParameterEncoding];
    [httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

    [httpClient postPath:@"api/v1/sessions" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) 

        NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"Here is what we got %@", jsonString);
        NSDictionary *loginResult = [jsonString objectFromJSONString];
        NSNumber* success = [loginResult objectForKey:@"success"];
        NSLog(@"success = %@", success);
        NSLog(@"yay");
        // sample output:
        //  "success":true,"auth_token":"4D8CyUsyGZdqo6X1TCeq"

     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        [self handleConnectionError:error];
    ];

【问题讨论】:

【参考方案1】:

我知道我的服务,我需要将 application/jsonrequest 添加到我的参数中,如下所示:

NSDictionary *parameter = @@"email":@"philswenson@mymail.com", @"password":@"mypassword", @"accept:application/jsonrequest";

AFJSONParameterEncoding 只告诉它以 JSON 文件的形式发送参数。我需要发送一个参数来告诉它如何发回数据。

【讨论】:

【参考方案2】:

添加:

[httpClient setDefaultHeader:@"Accept" value:@"application/json"];

【讨论】:

【参考方案3】:

我尝试了建议 - 没有骰子.... setDefaultHeader 实际上导致了崩溃(无论 iOS 术语是什么访问冲突)...

“accept:application/jsonrequest” 没看出有什么区别...

我最终使用了这段代码:

    NSDictionary *parameter = @@"email" : @"phil@gmail.com", @"password" : @"mypw", @"format":@"json";

【讨论】:

以上是关于这个 AFNetworking JSON 帖子我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

Json 加速器和 AFNetworking

如果值仅包含数字,AFNetworking 不会返回 NSString

使用 AFNetworking 快速传递参数

将块中异步接收的 JSON 对象传递给实例变量 - 在 iOS6 上使用 AFNetworking

AFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组

将自定义标头添加到 AFNetworking,我做错了啥?