Alamofire 3.2:如何验证"上传"POST呼叫的响应?

Rao*_*Rao 4 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)
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

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

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

Eth*_*han 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)
     }
Run Code Online (Sandbox Code Playgroud)

自动验证

自动验证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)
         }
     }
Run Code Online (Sandbox Code Playgroud)

好吧,最后

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

  • @Rob` .validate`对`.upload`方法不起作用,因此我进行了投票.现在我看到Ethan编辑了他的答案,编辑答案的最后部分就是诀窍!+1谢谢Ethan! (2认同)