【问题标题】:AFNetworking POST parameter with underscore带下划线的 AFNetworking POST 参数
【发布时间】:2016-07-12 03:16:04
【问题描述】:

这些数据在“邮递员”中完美地发布到我的网络服务,但在 AFNetworking 中却没有,所以我知道这是 AFNetworking 或 AFNetworking 处理 NSDictionary 的问题。

我使用下面的简单代码来发帖:

AFHTTPSessionManager *newSession = [AFHTTPSessionManager manager];
        newSession.requestSerializer = [AFJSONRequestSerializer serializer];
        newSession.responseSerializer = [AFJSONResponseSerializer serializer];
NSDictionary *tryParameters = @{@"tripID": @"1234", @"tailNum": @"N15HEHE", @"legNum": @"1", @"file_date": @"2016"};
[newSession POST:HTTP_POST_TRIP_DATA parameters:tryParameters progress:^(NSProgress * _Nonnull uploadProgress) {
            NSLog(@"TRY");
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            NSString *status = [responseObject valueForKey:@"status"];

            NSLog(@"RESPONSE: %@", responseObject);

            if ([status isEqualToString:@"success"]) {

                files(YES);
            } else {

                files(NO);
            }

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            //NOT success
            files(NO);   
        }];

在最后一个“tryParameters”上,我有一个“file_date”的键/值:@“2016”。这个下划线似乎是问题所在。如果我从 file_date 键中删除“_”(下划线),一切似乎都在处理。 (当然,我从我的服务器收到一个错误,说从未给出“file_date”。)。但是,如果我将“_”留在“file_date”键中,POST 请求将失败并且我得到...

[0] (null)  @"com.alamofire.serialization.response.error.response" : (no summary)   
[1] (null)  @"NSErrorFailingURLKey" : @"http://xxxxxxx.com/xxx/createTrip"  
[2] (null)  @"com.alamofire.serialization.response.error.data" : (no summary)   
[3] (null)  @"NSLocalizedDescription" : @"Request failed: unauthorized (401)"   

我不明白为什么“_”是这样一个问题。我可以在 GET 请求中从我的服务器读取它,但是当我尝试 POST 时,它失败了。

【问题讨论】:

    标签: json post afnetworking


    【解决方案1】:

    好吧,对于任何有同样问题的人。我解决了这个问题。 基本上,AFNetworking 的默认 requestSerializer 不允许特殊字符。你必须更改这行代码...

    newSession.requestSerializer = [AFJSONRequestSerializer serializer];
    

    到这行代码...

    newSession.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
    

    “漂亮”选项允许使用特殊字符并允许我以前的代码正常工作。

    花了一些时间来解决这个问题,所以希望这对某人有所帮助。

    【讨论】: