关于 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
,而不是像在 POST
、GET
等中那样的相对路径。以上是关于关于 AFNetworking 2的主要内容,如果未能解决你的问题,请参考以下文章