这些数据非常适合我的网站服务" Postman"但不是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键,一切似乎都在处理。 (当然,我的服务器收到错误,说#34; 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请求中从FROM我的服务器中读取它,但是当我尝试POST时,它会失败。
答案 0 :(得分:0)
好吧,对于有同样问题的人。我解决了这个问题。 基本上,AFNetworking的默认requestSerializer不允许使用特殊字符。你必须改变这行代码......
newSession.requestSerializer = [AFJSONRequestSerializer serializer];
到这行代码......
newSession.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
"漂亮"选项允许特殊字符,并允许我以前的代码工作得很好。
需要一段时间才能解决这个问题,所以希望这有助于某人。