Alamofire如何用async/await处理空响应PUT请求
Alamofire 空响应PUT请求async/await实现方案
核心结论
Alamofire 5.5及以上版本原生支持无响应体的异步await调用,不需要额外封装即可实现「等待HTTP 200状态码返回后执行后续逻辑」的需求,不需要强行套用String、Data、Decodable类型的响应序列化逻辑。
实现代码
直接使用Alamofire内置的空响应序列化器,配合状态码校验即可,示例代码如下:
import Alamofire func sendEmptyResponsePutRequest() async throws { _ = try await AF.request( "你的PUT接口地址", method: .put, parameters: /* 你的业务请求参数 */, encoding: JSONEncoding.default, headers: /* 你的自定义请求头 */ ) // 状态码校验:如果只接受200状态码,替换为.validate(statusCode: [200]) .validate() // 指定空响应序列化器,不解析任何响应体内容 .serializingResponse(using: .empty) .value }
关键点说明
.validate()默认会校验HTTP状态码是否在200~299的成功区间,不符合区间的返回会直接抛出AFError,不需要手动判断状态码。如果业务严格要求仅200为成功,可传入statusCode: [200]自定义校验规则。.serializingResponse(using: .empty)是Alamofire专门为无响应体场景设计的序列化器,不会尝试解析响应体内容,只要状态码校验通过就会结束等待,不会出现空响应导致的序列化失败问题。
业务侧调用示例
// 在异步上下文调用 Task { do { try await sendEmptyResponsePutRequest() // 代码走到此处即代表接口返回符合要求的200状态码,直接执行后续业务逻辑即可 } catch { // 统一处理错误:网络异常、状态码不符合预期、超时等 print("请求失败: \(error)") } }
常见避坑
不要使用默认的响应序列化方法处理空响应接口:默认序列化逻辑会尝试解析响应体为指定类型,空响应体场景下会直接抛出序列化失败错误,必须显式指定.empty序列化器。
内容的提问来源于stack exchange,提问作者Georg
相关产品推荐
相关产品推荐

