2014-05-12 4 views
1

서버 측에서 SlimFramework를 사용하고 클라이언트 측에서 AFNetworking을 사용하여 REST API를 작성하고 있습니다.AFNetworking에서 AFJSONRequestSerializer가 POST에 사용되는 경우 매개 변수는 항상 null입니다.

인증 전에 Header에 값을 추가하여 POST 전에 AFJSONRequestSerializer를 사용하고 싶습니다. 여기 내 코드는 다음과 같습니다.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
[manager.requestSerializer setValue:self.apikey forHTTPHeaderField:@"Authorization"]; 

[manager POST:url parameters:@{REST_PARAM_USERID: userId} 
     success:^(AFHTTPRequestOperation *operation, id responseObject) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

}]; 

그러나 오류 콜백은 항상 호출됩니다. 나는 Xcode에서 디버깅 할 때 null이 아니지만 서버에 전달 된 매개 변수가 항상 null이기 때문에 그 사실을 발견했습니다. requestSerializer를 주석 처리하면 서버가 제대로 작동합니다. 이유가 무엇인지 모르겠습니다. 아무도 도와 줄 수 있니? 감사합니다.

+0

서버에서 JSON을 파싱 할 예정입니까? –

+0

'REST_PARAM_USERID'와'userId'의 값과 클래스 유형은 무엇입니까? –

답변

1

AFJSONRequestSerializer을 사용하면 매개 변수가 항상 HTTP 요청 본문에 JSON으로 직렬화됩니다. 서버에서 JSON이 필요하지 않다면 서버를 다시 구성하거나 AFJSONRequestSerializer을 사용하지 않아야합니다. 어떤 이유로, 당신은 JSON을 통해 정상적인 URL 인코딩을 통해 일부 매개 변수 및 다른 사람을 보내려면, 경우

, 수동과 같이 당신의 URL로 추가해야합니다 :

NSString *urlWithParams = [NSString stringWithFormat:@"%@?%@=%@", url, REST_PARAM_USERID, userId"]; 

[manager POST:urlWithParams parameters:@{@"some other" : @"params"} 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

}]; 
+0

답변 해 주셔서 감사합니다. 내게 무슨 뜻인지 생각해. AFJSONRequestSerializer를 사용하는 이유는 내 http 헤더 안에 문자열을 전달하기 위해서인가? 그렇게 할 수있는 또 다른 방법이 있다면? –

+0

내 서버 쪽에서 Slimframework를 사용하고 있습니다. JSON 매개 변수를 지원하는지 확실하지 않습니다. 문서를 확인해야합니다. –

+1

AFJSONRequestSerializer를 사용할 필요가 없습니다. 요청 serializer는 본문 형식을 결정하며 헤더와 거의 관련이 없습니다. HTTP 헤더를 설정하려면'[manager.requestSerializer setValue : @ "someHTTPHeaderField : @"some-http-header "];'를 사용하십시오. 모든 serializer에서이 작업을 수행 할 수 있습니다. –

관련 문제