带下划线的 AFNetworking POST 参数

Posted

技术标签:

【中文标题】带下划线的 AFNetworking POST 参数【英文标题】:AFNetworking POST parameter with underscore 【发布时间】: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 时,它失败了。

【问题讨论】:

【参考方案1】:

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

newSession.requestSerializer = [AFJSONRequestSerializer serializer];

到这行代码...

newSession.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];

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

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

【讨论】:

以上是关于带下划线的 AFNetworking POST 参数的主要内容,如果未能解决你的问题,请参考以下文章

Webpack运行后,XMLHttpRequest发送带参请求,后台$_POST没有数据

thinkphp3.2.3 无法调用带下划线的模型

无法发出 POST 请求 - AFNetworking

AFNetworking 和 POST 请求

带参数的 Afnetworking 2

AFNetworking 2.0 POST 请求无法快速工作