我正在尝试通过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
,谁可以帮助解决此问题?非常感谢。
答案 0 :(得分:3)
更新:自AFNetworking 2.2.3起,您需要做的就是:
[requestSerializer setValue:@"application/vnd.mycom.mycom-csc+json" forHTTPHeaderField:@"Content-Type"];
this Github issue中的更多细节。
在AFNetworking 2中,序列化已被抽象为“请求序列化器”和“响应序列化器”。这些类被设计为子类,以处理像你这样的特殊情况。
对于您的具体问题,最简单的方法是:
AFJSONRequestSerializer
。覆盖生成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;
}
告诉您的操作经理使用您新创建的子类:
operationMgr.requestSerializer = [MyAwesomeJSONRequestSerializer serializer];
我不确定您所看到的行为是否是预期的(文档与实现完全不符)。我opened an issue on Github来讨论它。无论哪种方式,我建议的解决方法应该解决问题,如果你只是想让它工作。