带下划线的 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 参数的主要内容,如果未能解决你的问题,请参考以下文章