为什么Alamofire的DELETE请求无法正常工作,POST、GET请求均正常
代码问题排查点
参数编码不符合后端要求
你当前DELETE请求使用JSONEncoding.default将poster参数放在请求体中,但绝大多数后端服务不会解析DELETE请求的请求体参数,而是要求参数放在URL查询串中。你可以将编码方式替换为URLEncoding.default即可解决参数无法被后端识别的问题。DELETE请求响应为空导致解码失败
多数RESTful接口的DELETE请求成功后会返回204 No Content,响应体为空,你此时尝试用JSONDecoder解码Post.self必然失败,你可以判断如果响应状态码是204,直接构造对应Post对象调用completion,或者根据实际接口返回调整解码逻辑。解码错误被静默吞噬,无法定位问题
你两处请求都使用try?处理解码逻辑,一旦解码失败不会抛出任何错误日志,也无法感知失败场景:- 检查
getAllPosts方法中你定义的Posts类型是否符合返回结构,该方法的completion要求传入[Post]数组,你需要确保Posts是包含[Post]数组属性的Codable结构,否则会直接解码失败 - 建议把
try?替换为do-catch结构,打印解码错误信息,示例如下:
- 检查
do { let userResponse = try jsonDecoder.decode(Post.self, from: data) completion(userResponse) } catch { print("解码失败: \(error)") }
回调未兜底,上层逻辑无响应
你当前仅在解码成功时才调用completion回调,请求失败、解码失败场景都不会触发回调,上层业务会一直等待回调无法继续执行,建议在所有分支都增加回调处理,或者补充失败回调参数覆盖异常场景。路径拼接错误导致404
打印endpoint变量检查拼接结果,确保host末尾带斜杠,否则拼接出来的路径会缺少斜杠(比如host为http://xxx.com时,拼接结果会是http://xxx.composts/1而非正确的http://xxx.com/posts/1),导致请求404。
内容的提问来源于stack exchange,提问作者Angel Zambrano
相关产品推荐
相关产品推荐

