OSX - AFNetworking 即使设置了 JSON 序列化程序也发送文本

OSX - AFNetworking sending text even with JSON Serializer set

我对 AFNetworkingAFJSONRequestSerializer 有疑问。我尝试访问 API,请求包含 text/plain header。这是我的代码:

class BaseService {
    var manager: AFHTTPRequestOperationManager!

    init() {
        manager = AFHTTPRequestOperationManager()
        manager.responseSerializer = AFJSONResponseSerializer()
        manager.requestSerializer = AFJSONRequestSerializer(writingOptions: NSJSONWritingOptions.allZeros)
    }
}

class UserService: BaseService {
    func startNewEntry(name: String) {
        let params = [
            "time_entry": [
                "description": name,
                "created_with": "fooBar"
            ]
        ]

        manager.POST(
            "endpoint",
            parameters: params,
            success: { (operation, response) -> Void in

                let json = JSON(response)

                println("OK")
                println(json)

                Context.shared.entries.getFromJSON(json)

            }) { (operation, error) -> Void in
                println("-- ERROR --")
                println(operation)
                println(error)
            }
    }

你知道这个问题吗?

不,此代码将创建内容类型为 application/json 的请求。但我想知道您是否被一条错误消息误导了:

Request failed: unacceptable content-type: text/html

如果您明白了,那并不是告诉您请求的内容类型不可接受,而是因为响应text/html,所以请求失败了。这是一个非常常见的问题:如果尝试创建 JSON 响应的服务器代码由于某种原因失败,有时错误消息不是 JSON,而是 HTML。

我建议在 POST 方法的 failure 块中添加以下内容,以便查看此 text/html 响应是什么:

if operation.responseData != nil {
    println(NSString(data: operation.responseData, encoding: NSUTF8StringEncoding))
}

这样,如果您从服务器收到文本错误消息(例如,请求格式错误或您有什么问题),您将能够阅读您返回的 HTML 响应。