Bar*_*més 15 post json objective-c ios
在今天的iOS 8.3更新之前,我的代码工作正常,但在更新服务器后开始拒绝请求,因为它无法找到JSON数据.
我发现iOS发送了一个错误的应用程序/ x-www-form-urlencoded文本(没有正确编码,因为它似乎是一个JSON对象):

这是我期望发送的内容(以及8.2发送的内容):

正如我所说的,这只发生在iOS 8.3上(我刚刚在iOS模拟器上尝试过8.2并且它可以工作).
我认为问题出现在这些行中的一个类中:
NSData *bodyData = [NSJSONSerialization dataWithJSONObject:requestDict options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPBody = bodyData;
Run Code Online (Sandbox Code Playgroud)
我检查了Apple文档,最近没有出现任何修改.
有人遭受同样的痛苦或知道是什么导致这种情况?
谢谢.
Ruf*_*fel 11
我也在一个应用程序中遇到过这个问题.
看起来它可能是iOS 8.3中引入的错误.从官方的框架参考资料中可以看出它NSURLSessionConfiguration的HTTPAdditionalHeaders财产:
此属性指定基于此配置添加到会话中的所有任务的其他标头.例如,您可以设置User-Agent标头,以便它自动包含在您的应用根据此配置通过会话进行的每个请求中.
根据我的理解,此配置中的Content-Type集应自动包含在通过此会话发出的每个请求中,自8.3以来不再是这种情况.我已经提交了雷达.
更新:雷达被设置为另一个的"重复",所以它更可能是一个错误.
正如Luca所指出的,解决方法是直接在请求上设置Content-Type:
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
Run Code Online (Sandbox Code Playgroud)
资料来源: https ://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSessionConfiguration_class/#//apple_ref/occ/instp/NSURLSessionConfiguration/HTTPAdditionalHeaders
我把评论作为答案在这里:
尝试指出http方法
[request setHTTPMethod:@"POST"]
Run Code Online (Sandbox Code Playgroud)
和/或请求长度
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
Run Code Online (Sandbox Code Playgroud)
和/或内容类型
[request setValue:@"application/<YOUR CONTENT TYPE>"forHTTPHeaderField:@"Content-Type"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2335 次 |
| 最近记录: |