我正在使用AFHTTPSessionManager在网络上进行api调用。我有会话管理器的signleton对象,它启动一次基本URL。偶尔,我需要用不同的baseurl进行api调用。它只读取AFNetworking.h文件。
在这里处理不同基础的正确方法是什么?请帮助。
+ (ApiClient *)sharedClient {
static ApiClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kTraktBaseURLString]];
});
return _sharedClient;
}
答案 0 :(得分:7)
您可以使用+URLWithString:relativeToURL:
方法的行为来覆盖baseURL。
对于HTTP便捷方法,请求序列化程序使用NSURL + URLWithString:relativeToURL:,在提供时,从相对于baseURL的路径构造URL。如果baseURL为nil,则需要使用NSURL + URLWithString将路径解析为有效的NSURL对象:。
以下是baseURL和相对路径如何交互的几个示例:
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/
因此,如果您想为单个请求更改baseURL,您可以将绝对URL作为URLString
参数传递给GET:parameters:success:failure:
而不是URL路径。
[manager GET:@"http://otherBaseURL.com/url/path" parameters:nil success:... failure:...]