致我爬过的坑~

      AFN现在成了网络请求必用的第三方框架,AFN目前支持GET/POST/PUT/DELETE/HEAD请求.其中,GET与POST请求是使用的最多的请求。但是最近跟后台的交互中,应用了大量的PUT与DELETE请求,这让我有了一些全新的体验。PUT请求与POST基本一致,参数的传递也是传递字典即可。而DELETE请求的过程中,让我遇到了一个很大的坑。

      AFN做网络请求时,如果是用DELETE做请求时,AFN规定,要将请求参数放在URL中传递。 在类 AFURLRequestSerialization中,有这样一句设置,

self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE",nil];

      其中,HTTPMethodsEncodingParametersInURI 的意思很明显,就是指在URI中传递参数的方法有:GET/HEAD/DELETE。

      但是,有时后台会要求将参数放在请求体中传递。所以,这时候就需要重新设置一下HTTPMethodsEncodingParametersInURI。

      首先实例化AFHTTPSessionManager,然后在HTTPMethodsEncodingParametersInURI之中,将DELETE去掉就可以了。 代码如下:

 // 1.实例化manager,BASEURL是自己设置的
 AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:BASEURL]];

 manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];

      折腾了一个下午,最终还是万能的StackOverFlow拯救了我。附上遇到同样问题的Question与Answer:http://stackoverflow.com/questions/25140900/afnetworking-http-delete-use-body-instead-of-url 正如评论中有人所说:You saved my life, thanks!!! 此时此刻,深有同感呐!

图. The Answer In StackOverFlow