【发布时间】:2015-06-10 14:06:30
【问题描述】:
我在快速通过 Alamofire 从 Domino Access Service (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 { “缓存控制”=“无缓存”; 连接=关闭; “内容长度”= 220; "Content-Type" = "text/html; charset=US-ASCII"; 日期 =“星期一,2015 年 4 月 6 日 06:41:37 GMT”; Expires = "星期二,1980 年 1 月 1 日 06:00:00 GMT"; 服务器 = "莲花-多米诺"; } }) 错误错误域=NSCocoaErrorDomain 代码=3840“操作无法完成。(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。) UserInfo=0x7fc911f01af0 {NSDebugDescription=JSON文本没有以数组或对象开头,并且允许未设置片段的选项。}
所以内容类型是错误的,为什么我在将它放入 JSON (swiftyJSON) 时出错。我可以看到使用 responseString 而不是来自 Alamofire 的 responseJSON 的“错误”结果。现在奇怪的是。当我将端点放在像 CocoaRestClient 这样的休息客户端时,它给了我不同的内容类型
HTTP 200 无错误
内容编码:gzip 内容长度:489 变化:接受编码 内容类型:application/json 服务器:Lotus-Domino 日期:2015 年 4 月 5 日星期日 19:41:28 GMT
如果我使用相同的代码(仅更改端点)访问 Domino-REST-API 的不同部分(例如服务器上的数据库)。代码运行良好,我得到了 JSON。
那么我错过了什么?也许有人在 Domino 中通过 xPages 使用 REST 时遇到了同样的问题。
【问题讨论】:
-
您是否使用会话身份验证并且必须进行身份验证才能访问该 URL?因为如果凭据错误(或请求未正确发送),Domino 可能会返回登录表单(内容类型为
text/html)而不是 JSON 提要。 -
必须了解 HTTP 状态代码(而不仅仅依赖于 HTTP Content-Type)。这种情况下的问题不能是身份验证(抱歉,Mark ;-)),因为您获得了 HTTP 状态代码 404。这意味着找不到请求的资源(en.wikipedia.org/wiki/HTTP_404)。如果 Domino 上基于会话的身份验证丢失/错误,您将获得带有 Content-Type HTML 的 HTTP 状态代码 200(正如 Mark 指出的那样)。如果没有来自服务器(即 domlog)的进一步调试信息,就很难定义解决方案。
-
我正在登录我的数据库。为此,我使用了凭据的 [let credential = NSURLCredential(user: "name", password: "pwd", persistence: NSURLCredentialPersistence.ForSession)] 我从访问 viewCollection 的工作访问类中复制了它。
-
糟糕...错过了响应中的 404。我自己会 -1 ;)
标签: json rest xpages lotus-domino alamofire