Alamofire 3.2:如何验证“上传”的响应? POST电话?

时间:2016-02-16 06:42:40

标签: swift alamofire

我有一个简单的上传POST调用,

Alamofire.upload(
    .POST,
    "https://httpbin.org/post",
    multipartFormData: { multipartFormData in
        multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn")
        multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow")
    },
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .Success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
        case .Failure(let encodingError):
            print(encodingError)
        }
    }
)

即使响应是404/500错误,也总是会出现.Success情况。

我的问题是,我如何validate此请求的回复?

1 个答案:

答案 0 :(得分:8)

验证

默认情况下,无论响应的内容如何,​​Alamofire都会将任何已完成的请求视为成功。如果响应具有不可接受的状态代码或MIME类型,则在响应处理程序之前调用validate会导致生成错误。 手动验证

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
     .validate(statusCode: 200..<300)
     .validate(contentType: ["application/json"])
     .response { response in
         print(response)
     }

自动验证

自动验证200 ... 299范围内的状态代码,并且响应的Content-Type标头与请求的Accept标头匹配(如果提供了一个)。

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
     .validate()
     .responseJSON { response in
         switch response.result {
         case .Success:
             print("Validation Successful")
         case .Failure(let error):
             print(error)
         }
     }

好吧,最后

case .Success(let upload, _, _):
                upload.validate(statusCode: 200..<300)
                    .validate(contentType: ["application/json"])
                    .response { response in
                        print(response)
                }