在 Swift 中通过 Alamofire 访问 Domino 访问服务时内容类型错误

Wrong Content-Type when accessing Domino Access Service via Alamofire in Swift

我在 swift 中通过 Alamofire 从 Domino 访问服务 (9.0.1) 访问 REST API 时遇到一些问题。 我的代码如下所示:

    Alamofire.request(.GET, dbPath)
        .authenticate(usingCredential: credential)
        .responseViewCollectionArray { (request, response, viewWrapper, error) in
            println("res: \(response)")
            if let anError = error {
                println("error \(anError)")
                completionHandler(nil, anError)
                return
            }
            println("success atPath")
            completionHandler(viewWrapper, nil)
    }

结果给我带来了什么:

res: 可选( { URL: http://das.name.de/DASLib.nsf/api/data/collections } { 状态码: 404, headers { "Cache-Control" = "no-cache"; 连接=关闭; "Content-Length" = 220; "Content-Type" = "text/html;字符集=US-ASCII"; 日期 = "Mon, 06 Apr 2015 06:41:37 GMT"; 过期 = "Tue, 01 Jan 1980 06:00:00 GMT"; 服务器 = "Lotus-Domino"; } }) error Error Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"(JSON 文本未以数组或对象开头,并且未设置允许片段的选项。)UserInfo=0x7fc911f01af0 {NSDebugDescription=JSON 文本未从数组或对象开始,并允许不设置片段的选项。}

所以内容类型是错误的,为什么我在将它放入 JSON 时出错(swiftyJSON)。我可以使用 responseString 而不是 Alamofire 的 responseJSON 查看 "wrong" 结果。现在奇怪的是。当我将终点放在像 CocoaRestClient 这样的休息客户端时,它会给我一个不同的内容类型

HTTP 200 无错误

内容编码:gzip 内容长度:489 变化:接受编码 内容类型:application/json 服务器:Lotus-Domino 日期:2015 年 4 月 5 日,星期日 19:41:28 GMT

如果我使用相同的代码(仅更改端点)访问 Domino-REST-API 的不同部分(例如服务器上的数据库)。代码运行良好,我得到了 JSON.

那我错过了什么?也许有人在 Domino 中通过 xPages 使用 REST 时遇到了同样的问题。

正如@muenzpraeger 所指出的:您有一个 404 - 未找到。假设该资源确实存在,它指向一个配置错误。您很可能没有启用数据库或视图以通过 DAS 进行访问。 我会对 DAS 非常小心,一旦您允许 WRITE 访问任何可以访问 URL 并具有作者或更好访问权限的人,就可以写回任意文档并弄乱您的数据库(无验证!)。

我正在研究一些替代方案(这也将 return JSON 用于 404)。敬请关注