在AFNetworking 2.x中设置自定义标头后,RESTful API不会接收这些参数
我按照AFNetworking 2.0中的建议解决方案向GET请求添加标头,以使用以下代码片段为请求指定自定义标头:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager.requestSerializer setValue:someID forHTTPHeaderField:@"some_id"]; NSDictionary *parameters = @{@"id": user.id, @"birthday": user.birthday}; [manager POST:[NSString stringWithFormat:@"%@/user_create",BaseURLString] parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { if (responseObject[@"error"]) { NSLog(@"REST User Create Response Error: %@", responseObject[@"error"]); } else { [self saveUserDetails:responseObject]; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"REST User Create Error: %@", error); }];
但是当执行此操作时会发生什么,我在API的响应中收到错误,说明我的所有参数都丢失了。 以前用于工作的相同代码块(无需设置自定义标头以及API最初不需要它们时)。
有谁知道如何正确设置自定义标头和POST参数?
谢谢,尼诺
你的代码对我来说很好。
一些事情要尝试:
- 尝试使用AFNetworkActivityLogger查看实际发送的内容(将其设置为
AFLoggerLevelDebug
。)您还可以使用像Charles这样的Web代理或像Wireshark这样的协议分析器。 -
如果确定数据未正确发送,请在
[AFURLRequestSerialization -requestBySerializingRequest:withParameters:error:]
设置断点。 这是您的HTTP标头和参数添加到URL请求的位置。 该方法非常简单; 您应该可以单步执行并观察在请求中添加内容并确定跳过的原因。注意: AFURLRequestSerialization.m包含AFURLRequestSerialization的多个子类。 在超级实现中以及在AFJSONRequestSerializer实现中设置断点。
可能导致此行为的示例:
-
parameters
是nil
。 - 你已经将
POST
添加到HTTPMethodsEncodingParametersInURI
但是- 您的API未准备好处理POST请求中附加到URL的参数,或
-
queryStringSerialization
块为nil
,queryStringSerializationStyle
设置为AFHTTPRequestQueryStringDefaultStyle
以外的其他AFHTTPRequestQueryStringDefaultStyle
。
- NSJSONSerialization无法处理您的
parameters
字典
-
一方面注意(与您的问题无关),如果您使用AFHTTPRequestOperationManager的initWithBaseURL:
方法,并保持对您的经理的强引用,您将不必这样做[NSString -stringWithFormat:
]的东西来构建您的URL。
我发现我应该将我的请求序列化器设置为以下,因为我的API不需要JSON格式的参数。
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
希望这有助于其他人处理与我相同的情况。