在 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)。敬请关注
我在 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)。敬请关注