AFNetworking 2.0 и заголовок запроса

Я использую AFNetworking 2.0. Я реализовал свой одноэлементный класс как подкласс: AFHTTPSessionManager

+ (RESTClientManager *)sharedManager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedInstance = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://myurl.com:8080"]];
    });

    return _sharedInstance;
}


- (instancetype)initWithBaseURL:(NSURL *)url
{
    self = [super initWithBaseURL:url];

    if (self) {
        self.responseSerializer = [AFJSONResponseSerializer serializer];
        self.requestSerializer = [AFJSONRequestSerializer serializer];
    }

    return self;
}

Когда мне нужно сделать POST, я использую этот код:

[self POST:@"/users" parameters:requestParameters success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"Ok");

    }
    failure:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"Failed");
    }];

Но я получаю сообщение об ошибке:

{ status code: 406, headers {
    Connection = "keep-alive";
    "Content-Length" = 0;
    "Content-Type" = "application/json";
    Date = "Sat, 30 Aug 2014 09:29:15 GMT";
    Server = "8";
    "X-Powered-By" = "Undertow 1";
} }, NSLocalizedDescription=Request failed: unacceptable (406)}

Используя клиент RESTful, я попытался сделать тот же запрос: это хорошо работает, когда я добавляю эти поля заголовка:

  • Принять": приложение/json
  • Тип содержимого: приложение/json

Как я могу получить это с помощью AFNetworking 2.0??


ИЗМЕНИТЬ

Печать словаря параметров

po requestParameters
{
    city = "";
    country = Italy;
    deviceToken = "";
    email = "[email protected]";
    mobileNumber = "";
    name = "Test_iOS";
    phoneNumber = "";
    postalCode = "";
    street = "";
    streetNumber = "";
    surname = "";
    userId = 00000001;
}

person Safari    schedule 30.08.2014    source источник


Ответы (1)


Если вы добавили правильный Content-Type в заголовок запроса, то ваши параметры, вероятно, являются источником ошибки. Если вы можете связаться с кем-либо, отвечающим за внутренний сервер, вы сможете получить от них точный отчет об ошибке. Если нет, убедитесь, что параметры не равны нулю, и то, что вы передаете, соответствует стандартам, которые использует сервер.

Мы могли бы помочь вам лучше, если бы могли видеть передаваемые параметры.

person Abhijay Bhatnagar    schedule 30.08.2014
comment
Я создаю NSDictionary и передаю его в этой строке: [self POST: @/users parameters: requestParameters Success:... - person Safari; 30.08.2014
comment
Я отредактировал свой вопрос: теперь вы можете найти распечатку параметров словаря. Tnx - person Safari; 30.08.2014
comment
Вы уверены, что ваш сервис возвращает ответ JSON? stackoverflow.com/ вопросы/14251851/ - person Abhijay Bhatnagar; 30.08.2014
comment
В документе спецификации работы я прочитал, что эти параметры должны быть Json: только что прочитал: Body JSON Содержит данные пользователя. Я не понял: я должен добавить этот Json в тело запроса как NSData или я могу передать NSDictionary методу POST AFNetworking??? - person Safari; 30.08.2014
comment
Код ошибки 406 возникает, когда ваша серверная служба сообщает, что тип ответа, который она возвращает, не указан в HTTP-заголовке Accept-Type в ваших клиентских запросах. Это означает, что по какой-то причине для вашего типа контента и принятия не установлено значение Json, хотя вы это уже сделали. Попробуйте nslog self.requestserializers.allhttpheaders прямо перед выполнением POST-запроса. (Я пишу это по памяти, поэтому на самом деле имя свойства может быть просто другим) - person Abhijay Bhatnagar; 30.08.2014