最近公司要做AES加密,然后后台要我们将参数加密后传递过去.后台接收的是json格式数据,并且要加一些header信息.
//实例化AFHTTPSessionManager
manager = [AFHTTPSessionManager manager];
//说明请求格式为json格式
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//说明接收格式为json格式
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//与后台约定好可接收的Content-Type
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",nil];
//增加头部
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
将这些封装到网络工具类里
但是在使用时,由于加密后的参数是一段字符串,而我们说明了requestSerializer是json格式的,所以如果我们传递字符串过去会导致奔溃
//打断点后奔溃的原因
[mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];
主要是因为当我们说明了请求为json时,AFN内部会帮我们处理转为json格式的data,所以我们就要实现一个方法
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
//在这里面对parameters进行处理
return 处理后的参数;
}];
这就是在请求为json格式的时候传递字符串奔溃的方法