AFNetworking - Создание XML-запроса POST для службы REST? Как сформировать параметры NSDictionary?
Я пытаюсь создать запрос POST к API REST, чтобы опубликовать новую запись времени. Требуемая XML-структура для пост-запроса выглядит следующим образом:
<time-entry>
<person-id>#{person-id}</person-id>
<date>#{date}</date>
<hours>#{hours}</hours>
<description>#{description}</description>
</time-entry>
С AFNetworking кодирование XML сделано за кулисами только от передачи NSDictionary параметров к запросу POST? Вот мой код до сих пор:
От моего клиента:
-(void)postTimeEntry:(TLActiveWork *)work {
[self setAuthorizationHeaderWithUsername:[self.activeUser username]
password:[self.activeUser password]];
// Most of the following is static data. Just trying to get a successful POST at the
// moment.
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%@",[[self activeUser] personId]], @"person-id",
[NSString stringWithFormat:@"%@",[NSDate date]], @"date",
@"1", @"hours",
@"testing...!", @"description",
nil];
NSDictionary *wrapper = [NSDictionary dictionaryWithObjectsAndKeys:
params, @"time-entry",
nil];
NSLog(@"Params: %@", wrapper);
// AFNetworking call!
[self postPath:[NSString stringWithFormat:@"/projects/%@/time_entries.xml",
[[work project] projectId]] parameters:wrapper
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"-----SUCCESS!!!-----");
} failure:^(__unused AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failure: %ld - %@", [operation.response statusCode],
[error description]);
}];
}
Да. Мои операции APIClient настроены для XML через:
[self registerHTTPOperationClass:[AFXMLRequestOperation class]];
Прямо сейчас каждый раз, когда я пытаюсь выполнить POST с этим кодом, я всегда получаю ошибку кода ответа 422, что, по моему мнению, означает, что передаваемая сущность была необработанной. /questions/29107182/rest-http-kodyi-sostoyaniya-dlya-neudachnoj-proverki-ili-nevernogo-dublikata/29107215#29107215
Я думаю, что моя проблема только в том, что XML для поста не создается правильно через передачу аргумента параметров NSDictionary?
Любая помощь будет принята с благодарностью!
Благодарю.
1 ответ
Хотя мой ответ не своевременный, я надеюсь, что он поможет другим, кто столкнулся с этой проблемой. Ниже приведен пример того, как сделать XML POST
запрос с использованием AFNetworking
,
AFHTTPClient *HTTPClient = [[AFHTTPClient alloc] initWithBaseURL:@"https://stackru.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:HTTPClient.baseURL];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[[NSFileManager defaultManager] contentsAtPath:[[NSBundle mainBundle] pathForResource:@"TheNameOfTheXMLFileToSend" ofType:@"xml"]];
AFHTTPRequestOperation *operation = [HTTPClient HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
// The server responded without an error.
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// The server responded with an error.
}];
[HTTPClient enqueueHTTPRequestOperation:operation];