ios - Swift 2 JSON POST 请求 [NSMutableURLRequest 的 HTTPBody 的字典与字符串]

标签 ios swift macos swift2 nsurlsession

我有以下快速代码可以成功提交 POST 请求。

let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
request.HTTPBody = "foo=bar&baz=lee".dataUsingEncoding(NSUTF8StringEncoding)

let task = session.dataTaskWithRequest(request, completionHandler: completionHandler)

我不想使用像语法这样的查询参数,而是想使用字典,但是当我执行以下操作时:

let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(["foo":"bar", "lee":"baz"], options: [])

let task = session.dataTaskWithRequest(request, completionHandler: completionHandler)

(就像我周围看到的一样),它似乎提交请求就好像 body 是空的。

我的主要问题是:这些语法有何不同,生成的请求有何不同?

注意:来自 JS,我正在 javascript 环境(jquery.com 的控制台)中测试端点,如下所示,它运行成功:

$.ajax({
  url: url,
  method: 'POST',
  data: {
    foo: 'bar',
    baz: 'lee'
  }
});

最佳答案

@mrkbxt 说的。这不是语法有何不同的问题,而是您随请求发送的不同数据类型的问题。 UTF8 字符串编码文本是 NSMutableURLRequest 内容类型的默认值,这就是您的第一个请求有效的原因。要在正文中使用 JSON,您必须将内容类型切换为使用 JSON。

将以下内容添加到您的请求对象中,使其接受 JSON:

request.setValue("application/json", forHTTPHeaderField: "Content-Type")

关于ios - Swift 2 JSON POST 请求 [NSMutableURLRequest 的 HTTPBody 的字典与字符串],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36704965/

相关文章:

ios - 在 Flex 中获取 ipad 可写目录

ios - Scenekit 导入的 16x16 纹理立方体在设备上滞后

iphone - 方法在一秒钟内被调用多次,但它应该在很短的时间跨度内只运行一次

objective-c - 下拉类型的 NSPopUpButton,当我点击某些菜单项时,弹出窗口的标题没有改变

ios - CloudKit 无法通过约束与核心数据同步

c# - 通过代码将纹理标记为可读/可写

ios - 您的二进制文件未针对 iPhone 5 进行优化

ios - Xcode 用户界面测试 : lldb error "only available on iOS 9.0 or newer"

c++ - Netbeans 8.1(用于 C/C++)找不到我的编译器(gcc-6.0.0 开发版)

c++ - 无法在我的 OSX 中编译 "hello world"cpp