Содержимое тела запроса отправки AFNetworking 3.0

Я работаю над проектом, который использует AFNetworking для подключения к интерфейсу API. Моя проблема заключается в том, как отправить запрос на серверную часть с содержимым тела, которое включает электронную почту, deviceId. Я нашел множество решений, совместимых с AFNetworking 2.0, а не 3.0.

Теперь я использую SessionManager, когда я инициализирую запрос, как я могу добавить контекст тела содержимого?

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
NSString *stringData = [[NSString alloc]initWithData:jsonData encoding:NSASCIIStringEncoding];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
[manager POST:_urlString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    NSString *link = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"JSON: %@",link);
} failure:^(NSURLSessionTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

Я попытался поместить адрес электронной почты и идентификатор устройства в [параметр POST менеджера: Dict], но это не работает.

Может кто-нибудь сказать мне, как добавить тело в AFNetworking 3.0? Спасибо


person Janice Zhan    schedule 25.07.2017    source источник
comment
Вам лучше создать свой синглтон, чем использовать менеджер AFNetworking. Я обнаружил, что его менеджер переопределит ваш заголовок при отправке запроса, и менеджер вызовет утечку памяти. Вы можете реализовать свой менеджер.   -  person Kim Jin    schedule 25.07.2017
comment
@ S.Jin Можете ли вы привести пример? Я новичок в ios и target c, и я не могу этого понять.   -  person Janice Zhan    schedule 25.07.2017
comment
@JaniceZhan Вы можете унаследовать AFHTTPSessionManager и создать синглтон. Вот так:+ (instancetype)sharedManager { static MyManager *manager = nil; static dispatch_once_t pred; dispatch_once(&pred, ^{ manager = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://baseURL.org/"]]; }); return manager; } . Вы также можете установить поле заголовка при отправке запроса или в методе инициализации.   -  person Kim Jin    schedule 25.07.2017


Ответы (1)


если я правильно понял ваш вопрос, это не должно быть так сложно. он также похож на версию 2.0.

NSDictionary *parameters = @{@"username": _username.text,
                             @"deviceId": deviceIdString,

                             };



NSMutableDictionary * parameters = [[NSMutableDictionary alloc]initWithDictionary:params];

    NSURL *baseURL = [NSURL URLWithString:@"http://url.com/ws/test.php"];

    AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager POST:@"" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

        //Response

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

        if(error.code==-1001){
            //Handle the error

        }

    }];
person Im Batman    schedule 25.07.2017
comment
Хм. Это не работает. Результат нулевой. Я попробовал тот же запрос на Postman, и он работает. - person Janice Zhan; 25.07.2017
comment
я вытаскиваю это из рабочего кода. хм, это странно. - person Im Batman; 25.07.2017
comment
вы не получаете никаких исключений, верно? - person Im Batman; 25.07.2017
comment
Нет. Просто никакой ответ - person Janice Zhan; 25.07.2017