IOS 出现问题POST网络请求状态code:500的解决方法
IOS出现问题POST网络请求状态code:500的解决方法
前言:
iOS10用[NSURLSessionuploadTaskWithRequest:requestfromData:jsondatacompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror){}];
进行post网络请求时出现500错误
出现500的错误服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。IOSHTTP请求的常见状态码总结
虽然出现这种原因是服务器的错误,我觉得服务器解析请求数据也有可能出现这个错误状态500,所以我从客服端入手。
打印返回时的response里面的值为
:<NSHTTPURLResponse:0x17003a900>{URL:你的url地址}{statuscode:500, headers{ "Cache-Control"=private "Content-Length"=3306; "Content-Type"="text/html;charset=utf-8"; Date="Sun,09Oct201607:45:13GMT"; Server="Microsoft-IIS/7.5"; "X-AspNet-Version"="4.0.30319"; "X-Powered-By"="ASP.NET"; }}
从中我们可以看到,返回类型不是json而是text/html类型
我们知道,在post请求是需要设置请求头数据类型,以上出错的请求我是这样设置的
[requestsetValue:@"application/x-www-form-urlencoded"forHTTPHeaderField:@"Content-Type"];
这个设置方法是我从提交图片的网络请求方法拷贝过来的,即@"application/x-www-form-urlencoded"这个类型是提交图片的类型设置(提交图片时把提交图片参数转成NSData然后再转成base64的NSData提交)。而我的本次请求是提交json字符串的NSData类型。所以"Content-Type"的值设置成”application/json“即可。详解Http请求中Content-Type讲解以及在SpringMVC中的应用
我的解决方法是重新设置如下:
[requestsetValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
请求response大家可以和上面的做对比。
<NSHTTPURLResponse:0x17403fe60>{URL:你的url地址}{statuscode:200,headers{ "Cache-Control"=private; "Content-Length"=75; "Content-Type"="application/json;charset=utf-8"; Date="Sun,09Oct201607:56:16GMT"; Server="Microsoft-IIS/7.5"; "X-AspNet-Version"="4.0.30319"; "X-AspNetMvc-Version"="4.0"; "X-Powered-By"="ASP.NET"; }}
现在的 statuscode:200,解决了500错误的问题。出现这个错误也有可能后台对数据的处理错误,或者后台返回的数据类型和前端设置需要返回的类型冲突等。还是得具体问题具体分析
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!