参照C#可行代码,Swift实现HTTP Authorization请求失败求解决
问题分析与修正方案
你的Swift请求失败主要有三个核心问题,对应C#代码的逻辑差异逐一说明:
1. 认证头格式完全错误
C#代码中使用的是自定义认证方案:AuthenticationHeaderValue("user", "APIkey")会生成格式为user APIkey的Authorization头(第一个参数是认证方案名,第二个是直接携带的密钥)。但你的Swift代码错误地将user: APIKey做了Base64编码,完全偏离了原请求的认证规则。
2. 请求头设置不匹配
C#代码设置的是Accept: application/json(告知服务器希望接收JSON格式的响应),而Swift代码错误设置了Content-Type: application/json(该头用于标识请求体的格式,但原C#请求没有请求体,这个头是多余的),同时缺少了关键的Accept头。
3. 未显式设置POST请求方法
URLRequest默认的请求方法是GET,但C#使用的是PostAsync发起POST请求,Swift中必须显式指定请求方法。
修正后的Swift代码
guard let urlg = URL(string: "https://api.xx.com") else { fatalError("Missing URL") } var request = URLRequest(url: urlg) // 匹配C#的认证头格式 request.setValue("user APIkey", forHTTPHeaderField: "Authorization") // 设置正确的Accept头 request.setValue("application/json", forHTTPHeaderField: "Accept") // 显式指定POST请求方法 request.httpMethod = "POST" // 发起请求示例 let task = URLSession.shared.dataTask(with: request) { data, response, error in // 此处添加响应处理逻辑 } task.resume()
内容的提问来源于stack exchange,提问作者Peter P
相关产品推荐
相关产品推荐

