【问题标题】:Wrong Content-Type when accessing Domino Access Service via Alamofire in Swift在 Swift 中通过 Alamofire 访问 Domino 访问服务时内容类型错误
【发布时间】: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


【解决方案1】:

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

我正在研究一些替代方案(这也将在 404 上返回 JSON)。敬请期待

【讨论】:

  • 未找到 >> 我在数据库名称中有错字 :( 感谢大家的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多