我有以下API调用:
URL: /api/some-call
Method: PUT
PARAMS: No params
它只是一个简单的PUT方法。我正在尝试使用AFNetworking来做到这一点,不幸的是,我失败了。这就是我现在所拥有的:
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *req = [httpClient requestWithMethod:@"PUT" path:@"" parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:req];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success");
} failure: ^(AFHTTPRequestOperation *operatn, NSError *error) {
NSLog(@"Failure");
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
然而,这是行不通的。这是为什么?此外,path
请求中PUT
应该是什么?我已经尝试了几件事情,这就是我现在最后的事情,我相信应该接近正确的事情。
最后一个问题:AFNetworking
不使用ARC
。这是否意味着我仍然需要autorelease
声明末尾的NSOperationQueue
?
修改
这是错误NSLog
:Failure Error Domain=com.alamofire.networking.error Code=-1011 "Expected status code in (200-299), got 409" UserInfo=0x7a91fb0 {NSErrorFailingURLKey=*the url*/api/some-call, NSLocalizedDescription=Expected status code in (200-299), got 409}
答案 0 :(得分:1)
好。您收到409错误代码。
引自http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html:
10.4.10 409冲突
由于与当前的冲突,请求无法完成 资源的状态。此代码仅在以下情况下允许 预计用户可能能够解决冲突 重新提交请求。响应主体应该包含足够的
用户识别冲突根源的信息。 理想情况下,响应实体将包含足够的信息 用户或用户代理来解决问题;但是,这可能不是 可能而且不是必需的。
最有可能发生冲突以响应PUT请求。对于 如果正在使用版本控制并且实体是PUT 包括对资源的更改与资产的更改 在早期(第三方)请求中,服务器可能会使用409响应 表示无法完成请求。在这种情况下, 响应实体可能包含两者之间的差异列表 这两个版本采用响应Content-Type定义的格式。
这意味着错误是由您的服务器引起的,而不是您的代码。除非你提供了一些错误的参数。
好。关于“PUT应该是什么道路”的问题。 通常我会将baseURL作为服务器的域名。 这就像
http://localhost
然后我会把路径变成类似
的路径@"the/rest/of/the/api/url"
然后只需切换一个baseURL就可以更轻松地在开发服务器和生产服务器之间切换。 :)
对于你的上一个问题,“AFNetworking不使用ARC。这是否意味着我仍然需要在NSOperationQueue声明结尾处自动释放?”
这是否意味着您的项目使用ARC进行AFnetworking,或使用AFNetworking WITHOUT ARC。
如果它是使用AFNetworking的ARC,则不必。看看这个 https://github.com/AFNetworking/AFNetworking#arc-support
如果使用AFNetworking进行非ARC,您基本上必须自己进行所有内存管理。 :) 如果您需要更多信息,请再次打我,我会相应地进行编辑。 :)
希望我有所帮助。