我正在使用AFNetworking
2.0。
在AFNetworking
中,AFHTTPRequestOperationManager
对象有一个API:
(AFHTTPRequestOperation *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
它接受NSDictionary作为我们希望“POST”到服务器的JSON Payload的参数。在我的有效载荷中,我有以下键值对:
"buttonActionParam":"/catalog/special/international-calling"
发布此有效内容服务器会返回无效的JSON。查看服务器端的有效负载,我意识到AFNetworking实际上正在发送:
"buttonActionParam":"\/catalog\/special\/international-calling".
我知道AFNetworking
库使用NSJSONSerialization
的类方法-dataWithJSONObject:
,这会导致这种情况。我的问题是:
Q值。如何解决这个问题?
答案 0 :(得分:1)
这是已知问题。它的实际行为与设计一致(见https://stackoverflow.com/a/20448342/669586)。
有3种可能的解决方案:
让您的服务器意识到可以转义字符串的可能性。一般来说,这是最好的解决方案。
使用其他JSON编码器(例如SBJson)并将对象编码为NSData
,而不是使用AFNetworking默认序列化程序。
使用NSJSONSerialization
进行编码,然后将结果数据转换为NSString
(使用NSUTF8StringEncoding
),对其进行清理并将其转换回NSData
。同样,在将对象提供给AFNetworking之前,您必须这样做。
实施2或3的最佳方法是在requestSerializer
实例上设置自定义AFHTTPSessionManager
。例如,请参阅this answer以获取实现3的示例(请注意它在Swift中)。