我需要使用表单数据从 Swift iOS 应用程序发布单个键值对。后端开发人员提供的 Postman 示例有效:
Postman Body 选项卡在“KEY”下显示“SelectedCreditCard”,在“VALUE”下显示“34”
方法是 POST。
Postman Headers 选项卡在 KEY 下显示“Content-Type”,在 VALUE 下显示“application/x-www-form-urlencoded”,以及一个附加的授权令牌标头。
从 Postman 运行时,我得到状态 400,其 JSON 正文包含“信用卡无效”警告。这是预期的结果。
在 Swift 中实现这一点时,我收到了 415(不支持媒体)。我将 Postman 生成的 curl 代码粘贴到 Mac 命令行中,只是为了看看它的外观,令我惊讶的是,我得到了与 iOS App 中相同的结果。
卷曲代码:
curl --location --request POST 'https://stg.xxx.com/api/xxx/SavePaymentInfo' \
--header 'Authorization: Bearer xxxxxxxxxx' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'SelectedCreditCard=34'
卷曲结果:
{"$type":"Microsoft.AspNetCore.Mvc.ProblemDetails,
Microsoft.AspNetCore.Mvc.Core",
"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13",
"title":"Unsupported Media Type",
"status":415,
"traceId":"0HLTFOL7EGBUA:00000007"}%
我还尝试了 Postman 提供的生成的 Objective C 代码和生成的 Swift 代码,在所有情况下结果都是 415。我得到正确结果的唯一情况(400 带有无效卡警告)是在运行帖子时直接来自邮递员本身。我想知道是什么导致了这个差距。