关于 AFNetworking 2

Posted

技术标签:

【中文标题】关于 AFNetworking 2【英文标题】:About AFNetworking 2 【发布时间】:2014-06-27 15:58:46 【问题描述】:

如何将块 AFHTTPRequestOperationManager 动态更改为 POST、GET、DELETE...

原来的例子已经把http方法固定了POST:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @@"foo": @"bar";
    [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"JSON: %@", responseObject);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);
    ];

我想知道,有没有办法动态插入http方法?虚拟示例:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @@"foo": @"bar";
  -->  [manager @"POST or GET or DELETE":@"http://example.com/resources.json" parameters:parameters <---success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"JSON: %@", responseObject);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);
    ];

抱歉,我提出了一个愚蠢的问题。

最好的问候。

【问题讨论】:

【参考方案1】:

是的,这是可能的。您需要自己设置NSURLRequest(或NSMutableURLRequest):

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// set up custom reqeust serializer here, if needed
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:[NSURL URLWithString:@"http://example.com/resources.json"] parameters:parameters error:nil];
[manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"JSON: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

我没有按原样运行此代码,但您看到了大致的想法。如果您使用的是自定义请求序列化程序,则需要按照上面评论中的说明进行设置。

只需将@"GET" 替换为@"POST" 或"@DELETE"。

【讨论】:

一般来说,如果您使用initWithBaseURL 创建了AFHTTPRequestOperationManager,此解决方案将忽略baseURL 设置。 @keeshux:为什么使用HTTPRequestOperationWithRequest 方法会忽略baseURL 因为在 HTTPRequestOperationWithRequest 中,您传递的是显式预构建的 NSURLRequest,而不是像在 POSTGET 等中那样的相对路径。

以上是关于关于 AFNetworking 2的主要内容,如果未能解决你的问题,请参考以下文章

关于最新版AFNetworking(3.0)上传多张图片的问题

从 AFNetworking 切换到 RestKit

iOS开发篇-AFNetworking网络封装(下载)

AFNetWorking 网络请求转载

AFNetworking 显示上传进度

带有 OAuth2 令牌的 AFNetworking 2.0