Alamofire сообщение с телом в быстром - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь сделать пост-запрос с alamofire с телом, но у меня продолжает появляться этот код ошибки «Сообщение: произошла ошибка».Я запускаю один и тот же API в obj-c и afnetworking, все работает отлично.Использую ли я неправильный способ задания параметров?

let parameters: [String: Any] = ["ID": "aaaa@test.com", "PW": "12345", "LoginType": "IDPW", "PushKey": "ios"]
Alamofire.request(loginApi, method: .post, parameters: parameters, encoding: JSONEncoding.default)
            .responseJSON { response in
                print(response)
        }

Тело, которое я отправляю с использованием Objective-C & function

     NSDictionary *parameters = @{
                             @"LoginType": @"IDPW",
                             @"ID": @"aaaa@test.com",
                             @"PW": @"12345",
                             @"PushKey":  @"ios"
                             };
     - (void) AsyncHttpRequestWithMethod:(NSString * _Nonnull)method
                      URLString:(NSString * _Nonnull)URLString
                     parameters:(NSDictionary * _Nullable)parameters
                        headers:(NSDictionary * _Nullable)headers
                 uploadProgress:(nullable void (^)(NSProgress * _Nullable uploadProgress)) uploadProgressBlock
               downloadProgress:(nullable void (^)(NSProgress * _Nullable downloadProgress)) downloadProgressBlock
              completionHandler:(nullable void (^)(NSURLResponse * _Nullable response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler {

AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSMutableURLRequest *req = [[AFHTTPRequestSerializer serializer] requestWithMethod:method URLString:URLString parameters:parameters error:nil];

req.timeoutInterval = intTimeInterval;

if (headers && headers.count > 0) {
    NSArray *keys = headers.allKeys;
    for (int i = 0; i < headers.count; i ++) {
        [req addValue:headers[keys[i]] forHTTPHeaderField:keys[i]];
    }
}

[[manager dataTaskWithRequest:req uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
    if (uploadProgressBlock) uploadProgressBlock(uploadProgress);
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
    if (downloadProgressBlock) downloadProgressBlock(downloadProgress);
} completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {

    NSLog(@"completionHandler......");

    completionHandler(response, responseObject, error);
}] resume];

}

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Ваши коды выглядят хорошо для меня.

Без дополнительной информации трудно определить, что является реальной проблемой.

На мой взгляд, возможная проблема encoding

изменить

JSONEncoding.default

с другими доступными опциями, такими как URLEncoding.default

Дайте мне знать, если это не работает, тогда я удалю свой ответ

0 голосов
/ 22 февраля 2019

В вашем запросе headers отсутствует, пожалуйста, используйте следующий код для получения результата.

let headers = ["Content-Type":"application/json"]    
let parameter = ["MemberID": "aaaa@test.com", "MemberPW": "12345", "LoginType": "IDPW", "PushKey": "ios"]

            Alamofire.request(loginApi, method: .post, parameters: parameter, encoding: JSONEncoding.default, headers: headers)
                .responseJSON { (response) in
                    switch response.result {
                    case .success:
                        print("success",response)
                    case .failure(let error):
                        print("failure",error)
                    }
            }

enter image description here

...