Как добавить заголовки в AFNetworking 4.0 в POST-запросе? - PullRequest
0 голосов
/ 09 апреля 2020

Я делаю это для определения заголовков в AFNetworking 4.0

      NSMutableDictionary *headers = [[NSMutableDictionary alloc]init];
      [headers setValue:[NSString stringWithFormat:@"Bearer %@",[defaults valueForKey:@"Token"]]  forKey:@"Authorization"];
      [manager POST:[NSURL URLWithString:path].absoluteString parameters:parameter headers:headers progress:nil success:^(NSURLSessionTask *task, id responseObject)
         { 

          }

И это метод определения нового метода POST в AFNetworking 4.0

    - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
                                   URLString:(NSString *)URLString
                                  parameters:(nullable id)parameters
                                     headers:(nullable NSDictionary <NSString *, NSString *> *)headers
                              uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
                            downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress
                                     success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                                     failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure
     { 

      }

Во время выполнения Это показывает мне ошибку "[<__ NSDictionary0 0x10c62a870> setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для ключа Authorization."

Скажите, пожалуйста, правильное решение для этого.

Заранее спасибо .

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Я сейчас использую AFN 4.0, но добавляю заголовок и в менеджер, как это:

AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];    
[sessionManager.requestSerializer setValue:bearerToken forHTTPHeaderField:@"Authorization"];

and GET/POST/PUT/DELETE header I send @{} to backend

Я надеюсь, что смогу помочь вам

0 голосов
/ 10 апреля 2020

Из приведенных выше ответов я нашел посередине ответов. Спасибо за ответ @baiyidjp и @Silversky Technology

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
     [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];

     NSString *path=[[NSString alloc]initWithFormat:@"%@",URL];

     NSMutableDictionary *parameter = [[NSMutableDictionary alloc]init];
     [parameter setValue:@"123456" forKey:@"id"];

     NSDictionary *headers = @{@"Authorization":[NSString stringWithFormat:@"Bearer %@",[defaults valueForKey:@"ApiToken"]]};

      [manager POST:[NSURL URLWithString:path].absoluteString parameters:parameter headers:headers progress:nil success:^(NSURLSessionTask *task, id responseObject)
         {
          NSLog(@"Response Object response is....==%@",responseObject);
          }
              failure:^(NSURLSessionTask *operation, NSError *error)
         {
          NSLog(@"Error Last 2 Done: %@", [error localizedDescription]);
          }
0 голосов
/ 10 апреля 2020

Использовать этот метод блока

+(void)postServiveCall:(NSDictionary *)perameters headers:(NSArray *)headers WithSuccess:(void (^)(id responseObject))success failure:(void (^)( NSError *error))failure
{

   AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

   if(headers.count > 0)
   {
    for (NSDictionary *headerData in headers)
    {
        [manager.requestSerializer setValue:headerData.allValues.firstObject forHTTPHeaderField:headerData.allKeys.firstObject];
    }
   }
   AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
   responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];

   manager.responseSerializer = responseSerializer;

   NSString *url = [NSString stringWithFormat:@"%@action.php",BASEURL];

   [manager POST:url parameters:perameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    success (responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    failure (error) ;

 }];
}

Как использовать этот параметр Ниже, здесь вы можете добавить несколько полей заголовка, если хотите

NSDictionary *postparam = @{@"action":@"versionCode",
                          @"version":version,@"device_type":@"iOS"
                          };

NSArray *heder = @[@{@"Authorization":[NSString stringWithFormat:@"Bearer %@",[defaults valueForKey:@"Token"]]}];

[ServiceCalls postServiveCall:postparam headers:heder WithSuccess:^(id responseObject)
 {
} failure:^(NSError *error)
{
}];
...