【问题标题】:Cannot make POST Request with AFNetworking无法使用 AFNetworking 发出 POST 请求
【发布时间】:2017-01-11 21:31:39
【问题描述】:

******************已编辑************************

我对 iOS 比较陌生,我想使用以下代码进行发布请求:

我收到 NSLocalizedDescription=请求失败:不可接受的内容类型:text/html,NSErrorFailingURLKey=https://xxxxxx-xxxxxx/xxxx/xxxx}},com.alamofire.serialization.response.error.response= { URL:https://xxxxxx/xxx/xxxx/xxxxxs }

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];

        [requestSerializer setValue:token1 forHTTPHeaderField:@"Authorization"];
        [requestSerializer setValue:@"PP" forHTTPHeaderField:@"x-service-code"];
        [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [manager setRequestSerializer:requestSerializer];


        NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:
                                token.tokenId, @"payment_method_nonce",
                                details.city, @"city",
                                details.address1,  @"address1",
                                details.state, @"state",
                                details.zipcode, @"zip",
                                nil];



        [manager POST:url parameters:params

             success:^(NSURLSessionDataTask *task, id responseObject)
         {
             NSLog(@"SUCCEEDED");
         }
             failure:^(NSURLSessionDataTask *task, NSError *error)
         {
             loadingOverlay.hidden = YES;
             NSLog(@"FAILED %@",error);


         }];

我发现了问题所在:我需要将参数作为原始 JSON 发送,但它没有这样做。我如何做到这一点?

我希望参数采用原始格式,即

{"payment_method_nonce":"tok_xxxxxxxx"}

【问题讨论】:

  • unacceptable content-type: text/html。尝试将text\html 添加到接受的内容类型。
  • 不起作用 + 我们的服务器不接受该格式。我已经验证问题不是标题而是参数正文。它需要作为原始 json 发送。如何将参数转换为原始 JSON?
  • 如何使用 JSON 格式的正文发送包含地址和令牌以及其他详细信息的发布请求?
  • 由于您将requestSerializer 设置为AFJSONRequestSerializer,它本身应该将参数转换为JSON 并将它们放入正文中。简单来说就是:NSDictionary ---(NSJSONSerialization)--> NSData (JSON 表示) --> theNS(Mutable)Request.htttpBody = theJSONNSData.
  • 我不知道是什么问题。我可以尝试使用构造 WithBodyBlocks 吗?

标签: ios objective-c iphone xcode afnetworking-2


【解决方案1】:

解决了,我改用 NSMutableDictionary:

[paymentDetails setObject:token.tokenId forKey:@"payment_method_nonce"];
            [paymentDetails setObject:details.address1 forKey:@"address1"];
            [paymentDetails setObject:details.city forKey:@"city"];
            [paymentDetails setObject:details.state forKey:@"state"];
            [paymentDetails setObject:details.zipcode forKey:@"zip"];

并使用 AFHTTPRequestOperationManager 而不是 AFHTTPSessionManager

【讨论】:

  • 似乎AFHTTPRequestOperationManager 是解决方案;不是NSMutableDictionary。 NSMutableDictionary 和 NSDictionary 应为请求生成相同的 params。
猜你喜欢
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2020-09-17
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
相关资源
最近更新 更多