1

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

4

1 回答 1

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 没有 ARC。

如果是带有 AFNetworking 的 ARC,则不必这样做。看看这个 https://github.com/AFNetworking/AFNetworking#arc-support

如果它不是带有 AFNetworking 的非 ARC,则您基本上必须自己完成所有内存管理。:) 如果您需要更多信息,请再次联系我,我会相应地进行编辑。:)

希望我在某种程度上有所帮助。

于 2012-06-12T05:25:55.863 回答