【问题标题】:Alamofire custom header not workingAlamofire 自定义标题不起作用
【发布时间】:2016-03-21 02:47:43
【问题描述】:

我正在尝试向Alamofire 请求添加自定义标头,但我认为标头未被识别。我仍然收到相同的结果,现在收到App Transport security 错误。我正在添加此处指定的标题-> http://developer.dribbble.com/v1/media/#comment-body-property(删除 html 并仅返回文本)。这是我到目前为止所尝试的。

 let headers = ["Accept": "application/vnd.dribbble.v1.text+json"]
        var manager: Manager = Manager.sharedInstance
        manager.session.configuration.HTTPAdditionalHeaders = headers

        manager.request(.GET, url, parameters: parameters).validate().responseJSON { response in
            switch response.result {
            case .Success:
                if let value = response.result.value {
                    let json = JSON(value)
                }
            case .Failure(let error):
                print(error)
            }
        }

【问题讨论】:

  • 您是否将“App Transport Security Setting”和“Allow Arbitrary Loads”设置为“YES”?
  • @6245Htarwara 是的,刚刚做了,结果保持不变

标签: swift alamofire


【解决方案1】:

您必须使用自定义标头传递 AlamofireNSMutableURLRequest。查看此issue 以获得更好的解释。

        var request = NSMutableURLRequest(URL: NSURL(string: "YOUR URL HERE")!)
        request.HTTPMethod = "GET"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
        request.addValue("application/vnd.dribbble.v1.text+json", forHTTPHeaderField: "Accept")
        //Add paramaters (Optional)
        let param = ["foo": "bar"]
        let encoding = Alamofire.ParameterEncoding.URL
        (request, _) = encoding.encode(request, parameters: param)
        Alamofire.request(request).responseJSON { response in
            //DO SOMETHING WITH YOUR RESPONSE OBJECT
        }

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    试试这个:

    Alamofire.request(.GET, url, parameters: parameters, headers: ["Accept": "application/json"]).responseJSON() { response in
            switch response.result {
            case .Success:
                if let value = response.result.value {
                    let json = JSON(value)
                }
            case .Failure(let error):
                print(error)
            }
        }
    

    【讨论】:

    • 已经尝试过了,alamofire 返回一个错误,说明找不到标头类型。我会再试一次并尽快发布确切的错误
    • "Response content type "application/json" does not match any acceptable content types: ["application/vnd.dribbble.v1.text+json"]"
    • 那不行,header需要匹配dribble api指定的header。
    【解决方案3】:

    也许为时已晚,但我相信可能会对其他人提供此解决方案。就我而言,我写的一切都很完美,但 Alamofire 没有发布标题。

    经过长时间的尝试,我发现问题是我的 URL 没有以“/”结尾。因此,当我添加此标题时,标题按预期构成。

    不工作:

    http://\(baseUrl)/api/chat
    

    但是这个是有效的:

    http://\(baseUrl)/api/chat/
    

    完整代码:

    let url =  "http://\(baseUrl)/api/chat/"
    let headers: HTTPHeaders = ["Content-Type":"application/json",
                                        "Authorization":"Token 57bbac4b15efb531c62558eb553372a0169d9c2e"]
    Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers )
            .responseJSON { response in
                print(response.result.value as Any)
                
                if let json = response.result.value {
                    if(response.response?.statusCode == 200){
                        let responseDict = json as! [String : Any]                
                        completion("Success", (response.response?.statusCode)!)
                    }
                    else
                    {
                        completion(nil, (response.response?.statusCode)!)
                    }
                }
                else
                {
                    let httpError = response.result.error
                    let statusCode = httpError!._code
                    completion(nil, statusCode)
                }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 2015-01-03
      • 2020-04-14
      • 1970-01-01
      • 2014-09-28
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多