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

Swift中如何使用Alamofire正确构造PUT请求的请求体

错误原因

你的参数构造存在两个问题,直接导致请求不符合接口要求:

  • 额外多嵌套了一层request键:目标请求体的最外层就是context_uri、offset、position_ms三个字段,不需要在外层包裹request字典
  • offset字段类型错误:接口要求offset是嵌套对象,你传入了空字符串,不符合结构要求
正确写法

首先构造和接口要求完全匹配的参数字典:

let parameters: [String: Any] = [
    "context_uri": "spotify:album:5ht7ItJgpBH7W6vJ5BqpPr",
    "offset": [
        "position": 5
    ],
    "position_ms": 0
]

发起PUT请求时必须指定编码格式为JSON编码,Alamofire默认使用表单编码,会导致请求体格式错误:

// 替换为实际接口地址
let apiURL = "你的目标请求地址"
AF.request(apiURL,
           method: .put,
           parameters: parameters,
           encoding: JSONEncoding.default,
           headers: [
            // 按需添加请求头,比如Spotify接口需要的Authorization鉴权头
           ])
    .validate() // 自动校验2xx状态码,非2xx会直接走failure回调
    .response { resp in
        switch resp.result {
        case .success(let data):
            // 处理请求成功逻辑,比如解析返回数据
            if let data = data {
                debugPrint("返回数据: \(String(data: data, encoding: .utf8) ?? "")")
            }
        case .failure(let err):
            // 处理请求失败逻辑
            debugPrint("请求错误: \(err)")
        }
    }
补充说明
  • 使用JSONEncoding.default时,Alamofire会自动给请求添加Content-Type: application/json请求头,不需要手动设置
  • offset里的position值从0开始计数,对应专辑里的曲目序号,根据实际业务需求修改即可
  • 如果需要从指定时间点开始播放,修改position_ms的值即可,单位是毫秒

内容的提问来源于stack exchange,提问作者Jack Hoskins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:54:31