AFNetworking HTTP PUT请求

时间:2012-06-12 02:59:54

标签: objective-c afnetworking http-put

我有以下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

修改 这是错误NSLogFailure 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}

1 个答案:

答案 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,您基本上必须自己进行所有内存管理。 :) 如果您需要更多信息,请再次打我,我会相应地进行编辑。 :)

希望我有所帮助。