如何设置除application / json之外的Content-Type

时间:2014-03-03 12:11:30

标签: json afnetworking

我正在尝试通过AFNetworking2.0向我的服务器发送REST API,当我发送请求时,我们的服务器只接受Content-Type作为application/vnd.mycom.mycom-csc+json,它确实是json格式,

    self.operationMgr = [AFHTTPRequestOperationManager manager];
    self.operationMgr.securityPolicy.allowInvalidCertificates = YES;
    operationMgr.responseSerializer = [AFJSONResponseSerializer serializer];
    operationMgr.requestSerializer = [AFJSONRequestSerializer serializer];
    self.operationMgr.responseSerializer.acceptableContentTypes = [NSSet       setWithObject:@"application/vnd.mycom.mycom-csc+json"];
    [self.operationMgr.requestSerializer setValue:@"application/vnd.mycom.mycom-csc+json" forHTTPHeaderField:@"Accept"];
    [self.operationMgr.requestSerializer setValue:@"application/vnd.mycom.mycom-csc+json" forHTTPHeaderField:@"Content-Type"];

    [self.operationMgr POST:@"https://ip/rest" parameters:body
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
     }
     failure:^(AFHTTPRequestOperation* task, NSError* error){
         NSLog(@"Error: %@", error);
     }];

但它似乎无法正常工作,Content-Type始终在我的请求中修改为application/json,谁可以帮助解决此问题?非常感谢。

1 个答案:

答案 0 :(得分:3)

更新:自AFNetworking 2.2.3起,您需要做的就是:

[requestSerializer setValue:@"application/vnd.mycom.mycom-csc+json" forHTTPHeaderField:@"Content-Type"];

this Github issue中的更多细节。


在AFNetworking 2中,序列化已被抽象为“请求序列化器”和“响应序列化器”。这些类被设计为子类,以处理像你这样的特殊情况。

对于您的具体问题,最简单的方法是:

  1. 创建AFJSONRequestSerializer
  2. 的子类
  3. 覆盖生成URL请求的方法,如下所示:

    - (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                                   withParameters:(id)parameters
                                            error:(NSError *__autoreleasing *)error {
        NSMutableURLRequest *mutableRequest = [[super requestBySer…etc.] mutableCopy];
        [mutableRequest setValue:@"application/vnd.mycom.mycom-csc+json" forHTTPHeaderField:@"Content-Type"];
        return mutableRequest;
    }
    
  4. 告诉您的操作经理使用您新创建的子类:

    operationMgr.requestSerializer = [MyAwesomeJSONRequestSerializer serializer];
    
  5. 我不确定您所看到的行为是否是预期的(文档与实现完全不符)。我opened an issue on Github来讨论它。无论哪种方式,我建议的解决方法应该解决问题,如果你只是想让它工作。