You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:24:28