使用AFNetworking框架时,出现不可接受内容类型错误的解决方法

时间:2023-01-28 11:01:53

在使用AFNetworking 3.0时出现了这个问题:

Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/plain"

 

以下为代码展示

 1 Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/plain"  

或者

 1 Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html"  

 

出现这个错误的原因是服务器返回给客户端的内容类型是 text/plain 或者是 text/html 格式,AFNetworking无法接受这些内容类型。

无法接受什么类型,就设置或添加这个类型。这里以 text/plain 为例。

 

解决办法1:设置AFN默认解析类型

 1 AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; 

 1 mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", nil]; 

此方法的缺点是,设置 text/plain 为接受类型以后,就不能完成对 text/json 等其他类型的解析。

 

解决办法2:将 text/plain 和 text/html 格式加入到AFN的源文件AFURLResponseSerialization.m中。

修改文件第228行

1 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];

1 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/plain", nil];

或为

1 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

 

添加一个无法接受的内容类型就可以解决。