在AFNetworking 2.x中设置自定义标头后,RESTful API不会接收这些参数

时间:2013-12-15 12:38:16

标签: ios afnetworking

我在AFNetworking 2.0 add headers to GET request处遵循建议的解决方案,使用以下代码段指定请求的自定义标头:

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参数吗?

谢谢, 尼诺

2 个答案:

答案 0 :(得分:2)

您的代码对我来说很好。

要尝试的一些事项:

  1. 尝试使用AFNetworkActivityLogger查看实际发送的内容(将其设置为AFLoggerLevelDebug。)您还可以使用Charles等网络代理或Wireshark等协议分析器
  2. 如果确定数据未正确发送,请在[AFURLRequestSerialization -requestBySerializingRequest:withParameters:error:]中设置断点。这是您的HTTP标头和参数添加到URL请求的位置。该方法非常简单;您应该能够单步执行并观察在请求中添加内容并确定跳过的原因。

    注意: AFURLRequestSerialization.m包含AFURLRequestSerialization的多个子类。在超级实现中以及在AFJSONRequestSerializer实现中设置断点。

    可能导致此行为的示例:

    • parametersnil
    • 您已将POST添加到HTTPMethodsEncodingParametersInURI但是
      • 您的API未准备好处理POST请求中附加到网址的参数,或
      • queryStringSerialization阻止为nilqueryStringSerializationStyle设置为AFHTTPRequestQueryStringDefaultStyle以外的其他阻止。
    • NSJSONSerialization无法处理您的parameters词典
  3. 一方注意事项(与您的问题无关),如果您使用AFHTTPRequestOperationManager的initWithBaseURL:方法,并对您的经理保持强烈的引用,您将不必执行该[NSString -stringWithFormat:}项内容你的网址。

答案 1 :(得分:0)

我发现我应该将请求序列化程序设置为以下内容,因为我的API不需要JSON格式的参数。

manager.requestSerializer = [AFHTTPRequestSerializer serializer];

希望这有助于其他人处理与我相同的情况。