使用AFNetworking的setQueryStringSerializationWithBlock时如何调用默认行为

时间:2014-10-31 13:14:40

标签: ios afnetworking url-encoding

我需要在我们的应用中阻止一个HTTP请求的一个参数值的URL编码,因为它在传递给AFNetworking之前已经被编码。*

似乎显而易见的方法是在AFHTTPRequestSerializer上使用setQueryStringSerializationWithBlock。但是,在我不需要自定义处理的情况下,我无法弄清楚如何移交给AFNetworking进行默认序列化。

即。我需要能够说(伪代码):

[sessionManager.requestSerializer setQueryStringSerializationWithBlock:
    ^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error)
    {
        if (request is DFP request and parameter is cust_params)
        {
            // do special handling
        }
        else
        {
            // do standard URL encoding for the parameter
            // how?
        }
    }];

基本上,对于else的情况,我想做AFURLRequestSerialization.requestBySerializingRequest做的事情,即调用静态函数:

AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding);

然而,这不会在AFURLRequestSerialization.m实现文件之外公开,因此我无法调用它。

这里的正确行动是什么?

*相关参数是DFP广告投放调用的cust_params参数,请参阅:https://support.google.com/dfp_premium/answer/1080597

1 个答案:

答案 0 :(得分:0)

AFQueryStringFromParametersWithEncoding是私有的,但其实现是通过使用URL编码的请求参数序列化的默认AFHTTPRequestSerializer实现公开的。只需从块中的另一个实例获取值。