Ios Afnetworking-post json->;400错误请求

Ios Afnetworking-post json->;400错误请求,ios,objective-c,salesforce,afnetworking-3,Ios,Objective C,Salesforce,Afnetworking 3,Im在ios应用程序中使用salesforce live agent rest api,试图请求聊天,但始终失败,请求不是有效的ChasitionInit NSDictionary *parameters =@{ @"SessionId" :self.sessionId, @"OrganizationId" :ORG_ID, @"d

Im在ios应用程序中使用salesforce live agent rest api,试图请求聊天,但始终失败,请求不是有效的ChasitionInit

NSDictionary *parameters =@{     @"SessionId"          :self.sessionId,
                                 @"OrganizationId"     :ORG_ID,
                                 @"deploymentId"       :DEPLOYEMENT_ID,
                                 @"buttonId"           :BUTTON_ID,
                                 @"userAgent"          :USER_AGENT,
                                 @"language"           :LANG,
                                 @"screenResolution"   :SCREEN_RES,
                                 @"visitorName"        :@"Test Visitor",
                                 @"prechatDetails"     :@[],
                                 @"prechatEntities"    :@[],
                                 @"receiveQueueUpdates":@"true",
                                 @"isPost"             :@"true"
                             };

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY];
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY];
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE];
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:ChasitorInit_path parameters:parameters progress:nil
      success:^(NSURLSessionDataTask *task, id responseObject) {
          NSError* error;
          NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                               options:kNilOptions
                                                                 error:&error];
      } failure:^(NSURLSessionDataTask *task, NSError *error) {

          NSLog(@"Error: %@", error);
      }];
Im使用AFV3 ios8 请求机构应为

{
"sessionId": "8f1cfb18-fbd1-4487-90d-e98c0a84e165",
"organizationId": "00D58000000OwMB",
"deploymentId": "57258000000L1mj",
"buttonId": "57358000000L24F",

"userAgent": "",
"language": "en-US",
"screenResolution": "1900x1080",
"visitorName": "Test Visitor",
"prechatDetails": [],
"prechatEntities": [],
"receiveQueueUpdates": true,
"isPost": true
}


我做错了什么?请纠正我

400错误请求意味着,您没有按照服务器期望的方式生成请求

检查服务器日志以了解问题所在

可能它需要另一种形式的数据

并尝试检查,您没有将null值传递给服务器

试一试:

 NSString *Loginurl = [NSString stringWithFormat:@"http://Enter your URL Here"];

    NSDictionary *params = @{     @"SessionId"          :self.sessionId,
                                 @"OrganizationId"     :ORG_ID,
                                 @"deploymentId"       :DEPLOYEMENT_ID,
                                 @"buttonId"           :BUTTON_ID,
                                 @"userAgent"          :USER_AGENT,
                                 @"language"           :LANG,
                                 @"screenResolution"   :SCREEN_RES,
                                 @"visitorName"        :@"Test Visitor",
                                 @"prechatDetails"     :@{},
                                 @"prechatEntities"    :@{},
                                 @"receiveQueueUpdates":@"true",
                                 @"isPost"             :@"true"
                             };

    NSLog(@"Sent parameter to server : %@",params);

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];



    manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];


    manager.responseSerializer = [AFHTTPResponseSerializer serializer];


    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",nil];

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",nil];

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY];
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY];
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE];
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION];

            AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    [policy setValidatesDomainName:NO];

    [policy setAllowInvalidCertificates:YES];



    [manager POST:Loginurl parameters:params progress:nil success:^(NSURLSessionTask *task, id responseObject) {

        NSLog(@"Response from server :  %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);



        _str=[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];


        NSLog(@"%@",_str);


        [self getdata:responseObject];



    } failure:^(NSURLSessionTask *operation, NSError *error)

     {

         NSLog(@"Error: %@", error);
     }];    
 }

#pragma mark-DataFromServer

-(void)getdata:(NSDictionary*)RegisterData

{


}

我的应用程序中也出现了同样的错误。我通过删除请求和响应序列化程序来解决它。仅实例化管理器并使用参数调用post方法

reqManager = [AFHTTPRequestOperationManager manager];
[reqManager POST:URLString parameters:parameters progress:nil
      success:^(NSURLSessionDataTask *task, id responseObject) {

      } failure:^(NSURLSessionDataTask *task, NSError *error) {

          NSLog(@"Error: %@", error);
      }];

感谢您的回复,我更新了问题请查看生成的jsonin参数将@“prechatDetails”:@{},替换为@“prechatDetails”:@[],更改后出现错误“字符0周围的值无效”。1)尝试将X-LIVEAGENT-AFFINITY值传递为null。这将防止会话过期。2) 如果您从联机文档示例复制了JSON,那么它是错误的。您可能希望使用JSON lint来双重检查您的JSON是否有效(我怀疑这很可能是您的问题所在)